【问题标题】:Why we cannot create the Instance of the Static Class in .Net为什么我们不能在 .Net 中创建静态类的实例
【发布时间】:2013-10-18 07:38:15
【问题描述】:

根据 MSDN

"一个类可以声明为静态的,表示它只包含 静态成员。无法创建静态实例 类使用 new 关键字。静态类会自动加载 由 .NET Framework 公共语言运行时 (CLR) 当程序 或包含该类的命名空间已加载。"

经过一番研究,我发现静态类不包含实例构造函数。我不明白为什么静态类不包含实例构造函数以及 static 关键字的用途。为什么 .Net 不允许我们创建静态类的实例?

【问题讨论】:

  • 静态类的定义是你不能实例化它。你想知道为什么存在静态类吗?或者阻止它们实例化的机制是如何工作的?类上的static 只是一个标志,上面写着“你不能实例化它”。
  • 我使用静态类来实现链式编程,就像使用 jQuery 一样。 MyStaticClass.StaticMethod1.StaticProperty1
  • @CodesInChaos 你错过了更重要的一点。它不能是基类,换句话说,它是密封并且必须从System.object派生
  • @SriramSakthivel 在 CLR 级别,它只是一个 abstract sealed 类。

标签: c# .net static


【解决方案1】:

静态类不包含任何实例成员属性或函数。所以做一个实例是没有意义的。

静态类用于包含在整个程序中具有相同效果的变量、属性和函数。

例如,您可以有一个“设置”类。

它具有所有静态属性。

当它被访问时(通过静态构造函数) 如果找不到文件,则自动从磁盘加载设置文件或重置为默认设置。

现在,您可以通过调用来访问整个程序中的此类

  • Settings.ScreenSize
  • Settings.RootPath

你甚至可以创建一个函数

  • Settings.Save() 将设置保存到磁盘以供下次使用。
  • Settings.Reset() 恢复默认设置。

这样做的好处是您的所有设置都将集中在一个位置,并且您的设置的所有逻辑都放在一个位置。您将始终知道,无论您调用它,设置类都只有一个实例

希望对你有帮助

【讨论】:

  • 静态类也是一种在多线程环境中存储通用信息的简便方法。
【解决方案2】:

当我们将类设置为静态时,编译器保证不能创建该类的实例(静态类)。因此这些方法与代码中的特定类对象没有关联。

静态类不能包含实例构造函数但它可以包含不带访问修饰符的静态构造函数。 在创建第一个实例之前,会自动调用静态构造函数来初始化类。

静态类是密封类,因此不能被继承。

您可以使用类型名称而不是引用来访问静态成员。

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多