可能重复:
{{3p>
静态课程与单身人士 - 什么是职业选手和职业选手每个人的缺点?
答案 0 :(得分:0)
静态方法和单例最终基本相同。静态方法'“单例实例”是类型。
这两个都应谨慎使用并尽量减少。它们在代码中创建依赖项,难以删除以进行测试。
答案 1 :(得分:0)
单例是一个类,其中只能实例化一个实例,而没有与静态方法相关联的实例。
如果您可以使用单个静态方法实现所需的功能,那么这可能是您最好的方法,因为它更容易实现。考虑扩展方法 - 它们只是具有语法糖的静态方法。如果您可以逻辑地将静态方法视为现有类的帮助程序,那么使用静态方法是有意义的。
另一方面,如果您尝试实现的功能涉及某种状态,那么最好使用Singleton。 Singleton对象可以包含/管理其状态并管理并发访问/线程,而静态类和静态方法则会变得更加复杂。如果您在C#中使用Singleton,我强烈建议您阅读Jon Skeet关于正确Singleton实现的文章,该文章可在http://www.yoda.arachsys.com/csharp/singleton.html获得。
与静态方法相比,单例类似于静态类。单身人士在这种比较中的一大优势是他们可以实现接口并从基类派生。这允许您将其实现与其接口分离。例如,如果我的核心程序集中有一个接口IAccountService
,我的服务层中有一个Singleton实现SingletonAspNetAccountService
,那么我可以使用IoC容器将IAccountService
注入我的UI层,无需依赖UI层中的服务层。另一方面,如果我有一个静态Accounts
类,那么我将不得不为静态类的方法创建一个适配器,或者在我的UI中依赖于服务层以访问静态帐户功能