2

実はシングルトンではありませんが、こんなに珍しいもののパターンがあるかどうかはわかりません。

たとえば、フレームワークにIWin32Windowは、コンソールアプリのコンソールを表す方法はありません。

public struct ConsoleWindow : IWin32Window
{
    [DllImport("kernel32.dll")]
    private static extern IntPtr GetConsoleWindow();

    IntPtr IWin32Window.Handle
    {
        get { return GetConsoleWindow(); }
    }
}

そして、あなたはそれをこのように使います。

MessageBox.Show(default(ConsoleWindow), "Hello, World!");

私は自分の利益のために賢すぎますか?これは「.netの方法」ですか?

静的な読み取り専用フィールド(何と呼ばれますか?)を使用することを検討しましたnew ConsoleWindow()が、どちらも正しくないようでした。

(この場合、Handleは1回だけアクセスされるため、明らかにパフォーマンスは問題になりません。)

4

1 に答える 1

4

プライベート コンストラクターと単一のインスタンス プロパティを持つクラスを使用できます。

public class ConsoleWindow : IWin32Window
{
    [DllImport("kernel32.dll")]
    internal static extern IntPtr GetConsoleWindow();

    IntPtr IWin32Window.Handle
    {
       get { return GetConsoleWindow(); }
    }

    private ConsoleWindow(){}

    public static ConsoleWindow Instance
    { 
        get 
        { 
            if (_instance == null) _instance = new ConsoleWindow();
            return _instance;
        }
    }
    private static ConsoleWindow _instance = null;
}

MessageBox.Show(ConsoleWindow.Instance, "Hello, World!");

これは、静的クラスを作成できない場合に使用される標準的なシングルトン パターンだと思います。

于 2012-09-14T08:49:58.153 に答える