静态类和私有构造函数

Lea*_*ner 3 .net c# static

我无法理解这一点.我尝试在VS2010中做一个小例子,如下所示.

"因此,创建静态类与创建仅包含静态成员和私有构造函数的类非常相似"

此语句是否表示具有私有构造函数的类,并且下面的一个或多个静态方法是静态类?我知道只有在类中提到static关键字时才调用类静态.

另外,我们不能继承下面的类,也不能实例化这个类吧?

public class Base
{
    private Base() { Console.WriteLine(" I am from normal Base constructor"); }
    static void NewMethod() { Console.WriteLine("Hey I am from Static Base"); }
    public void New() { } 
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*ert 13

因此,创建静态类与创建仅包含静态成员和私有构造函数的类非常相似

这句话试图找到正确的想法,但没有这样做.静态类是喜欢,只有静态成员和私有构造函数的类.这是一个包含静态成员和私有构造函数的类:

class X
{
    private X() {}
    public static X Y() { return new X(); }
}
Run Code Online (Sandbox Code Playgroud)

但这根本不像一个静态类!该声明的作者似乎认为拥有私有构造函数会阻止您创建实例,但当然不会.

更准确的说法是:

创建一个静态类就像创建一个既抽象又密封的类,并且不包含实例成员.

实际上,当C#编译器生成静态类的代码时,它正是它的作用:它将类标记为抽象(因此无法直接实例化)和密封(因此无法扩展).

我注意到你宣布一个既抽象又自己密封的课程是不合法的; 在C#中这样做的唯一方法是创建一个静态类.

我将把这个误导性的句子提请MSDN文档管理员注意.谢谢你指出来.

  • @Jowen:避免语言功能,因为你发现它"与OOP相反"似乎很不幸; 这是一个有用的功能.OOP是好的,因为这种编程风格降低了在大型团队中编写软件的成本,而不是因为它受到编程之神的祝福.重要的是你的程序是正确的,可理解的,可维护的,并解决一个真正的客户问题,而不是它们是OOP的美丽例子. (2认同)

Tre*_*ley 12

这意味着:

public static class Foo
{
    public static void Bar() { }
}
Run Code Online (Sandbox Code Playgroud)

与...基本相同

public class Foo
{
    private Foo() { }
    public static void Bar() { }
}
Run Code Online (Sandbox Code Playgroud)

因为如果类只有一个私有构造函数,则无法在类外部实例化它.

  • 所有实例构造函数都是"private"的非密封类可以通过嵌套自身的类从_only_继承.在上面的例子中,`Foo`不包含嵌套类型.此外,`private`构造函数可用于从_inside_类实例化类,但上面的`Foo`不包含`new`对象表达式. (3认同)