【问题标题】:benefits of a static class [duplicate]静态类的好处[重复]
【发布时间】:2011-05-01 08:50:33
【问题描述】:

可能重复:
What is the use of a static class

声明静态类有什么好处?

public static class MyStaticClass
{
}

除了“不能实例化”还有别的吗?
为什么你还想要一个静态类,为什么类应该是静态的?
“任何类都应该被声明为静态的,除非它被实例化”是一个好的经验法则吗?

【问题讨论】:

    标签: c# static


    【解决方案1】:

    您需要一个静态类来创建扩展方法。

    【讨论】:

      【解决方案2】:

      静态类可用作实用函数和常量的容器。如果该类不代表一个对象并且仅用于此目的,那么将其声明为静态是有意义的。

      【讨论】:

        【解决方案3】:

        仅声明静态方法(如 System.IO.File)的实用程序类不会被实例化,因此它通常是静态的。

        你说得对,我觉得它很有用。单例是不同的,因为它是私有实例化的。

        【讨论】:

          【解决方案4】:

          静态类和类成员是 用于创建数据和函数 无需创建即可访问 类的实例。静态类 成员可用于分隔数据 和独立的行为 任何对象身份:数据和 功能不会改变,无论 对象会发生什么。静止的 没有类时可以使用 类中的数据或行为 取决于对象身份。

          直接取自 MSDN。它比我解释得更好。这里的关键事实是对象会在整个生命周期中持续存在。

          扩展方法也必须写在静态类中。我倾向于将这些用于字符串扩展或集合扩展。

          【讨论】:

            【解决方案5】:

            如果一个类有静态修饰符,那么:

            • 这让你的意图很明确:这不仅仅是一个碰巧有所有静态成员的类 - 它是一个永远有静态成员的类
            • 您可以防止实例化只需要一个私有构造函数来抑制默认的公共构造函数
            • 您不能声明该类型的变量
            • 不允许将该类型用作类型参数(无论如何是 IIRC)
            • 如果是顶级类型,您可以在该类型中声明扩展方法

            第一点是最重要的,IMO。您正在向编译器和其他开发人员传达意图。

            【讨论】:

            • .NET 项目中,是否可以创建一个静态类来在页面之间传递变量值,否则这里会涉及风险。我听说我们应该避免使用全局变量和静态类,除非上下文非常清楚。在我的例子中,我使用一个静态类来分配一个来自 page1 的变量的值(例如,myStaticClass.City = "London"),然后从 page2 作为 myStaticClass.City 访问它。在这样一个简单的情况下(只有几个类成员)是否可以仅将静态类用于在同一应用程序的页面之间传递变量值?
            • @nam:什么样的应用程序中的页面?对于 Web 应用程序,这绝对是个坏主意——它不处理扩展到多个服务器的问题,也不为不同的用户保留数据。在桌面应用程序中,我会说它仍然不是一个干净或可测试的设计,但它没有同样的问题。
            • 对不起,我忘了提WPF app。但事实上,忘记对我有好处,因为您的回复甚至涵盖了网络应用程序(谢谢)。我的印象是使用静态类不一定是不好的做法,而是should be used wisely
            • @nam:使用静态类来存储全局可变状态(这就是你所提议的)通常是 IMO 的一个坏主意。全局状态很难推理,也很难测试。只存储不可变状态并包含状态方法的静态类是很好的 IMO。
            猜你喜欢
            • 1970-01-01
            • 2011-07-12
            • 2015-08-13
            • 1970-01-01
            • 2014-04-11
            • 1970-01-01
            • 2011-02-06
            • 1970-01-01
            • 2010-10-25
            相关资源
            最近更新 更多