在.NET中实现单例模式时是否有使用属性或方法的约定?
我无法想出使用其中一种方法的任何理由,除了方法可能会在将来接受参数。
答案 0 :(得分:2)
文章Choosing Between Properties and Methods对通用方案有一些很好的建议。问题是延迟初始化会使主题有点笼罩。
一方面,你有这些论据表明它可能是一个财产。
另一方面,你有这些论据表明它可能是一种方法。
我看过单身人士都是双向实施的。最后,您的决定不会对您的其他应用程序产生巨大影响,因此这可能是一个没有实际意义的讨论。然后,如果这是您公开的API的一部分,那么该决定确实具有一定的重要性。主要的是考虑呼叫者将如何对您的决定做出反应。例如,大多数开发人员(通常无意识地)假设属性是无异常的,因此如果您的单例创建可能会抛出,那么最好使用GetInstance()
方法。否则,拥有Instance
属性可能是更好的路径。
要考虑的另一件事是单例是否将用于WPF或Silverlight的XAML绑定。通常,您将公共属性绑定到XAML元素,因此在这种情况下,尽管使用方法方法的参数,但将单例作为属性实现将是更好的路径。
答案 1 :(得分:1)
一般来说,Singleton的大多数“标准化”示例都使用属性,底层实例是通过Lazy<T>
创建的。
鉴于单例通常只返回一个实例,一个(get only)属性与期望值匹配。
答案 2 :(得分:1)
由于两个 MSDN 原因,您可以使用属性: -
这种实现有两个主要优点:
- 因为实例是在Instance属性方法中创建的,所以该类可以执行其他功能(for 例如,实例化一个子类),即使它可能会引入 不受欢迎的依赖。
- 在对象请求实例之前不执行实例化;这种方法被称为惰性实例化。当&gt;应用程序启动时,延迟实例化避免实例化不必要的单例。