嗯,这不是一个单身人士,但我不知道是否有一种非常罕见的模式。
例如,框架中无法获得代表控制台应用程序控制台的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只被访问一次。)
答案 0 :(得分: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!");
我相信这是在无法创建静态类时使用的标准单例模式。