静态构造函数和私有构造函数之间的主要区别是什么?



我只是想知道静态构造函数和私有构造函数之间的主要区别。

我知道静态构造函数用于初始化类的静态成员。静态构造函数无法访问非静态成员。它在类的第一个实例之前执行。我们无法确定执行时间。静态构造函数由CLR执行,而不是按类的对象执行。没有参数化的静态构造函数,因为它由CLR而不是由对象处理。执行时间可能是在包含的组件的加载中。

但是,私人构造函数用于限制要实例化和继承的类。每当类仅包含静态成员时,都会使用私有构造函数。

除此之外,这两者在记忆使用和其他内容方面有什么区别?应该使用哪个?

私有构造函数仍然是实例构造函数 - 它们不是静态的。它们与公共构造师没有什么不同,只是他们定义了谁可以称呼它们,就像公共和私人常规方法之间的区别一样。

私人构造函数的某些可能的用例将用于单身人士,私人构造函数,其功能由多个公共构造函数共享,或者使用静态方法来构建您的类而不是构造函数。

public class Bar {
     private Bar() { }
     private static readonly Bar _instance = new Bar();
     public static Bar GetInstance() { return _bar; }
}
public class Baz {
    private string _msg;
    private Baz(string msg) { // Not accessible publicly
        _msg = msg;
    }
    // These two are accessible publicly, and both call
    // the private constructor
    public Baz(int i) : this(i + " is an integer") { }
    public Baz(decimal d) : this(d + " is a decimal") { }
}
public class Foo {
    private Foo() { // Not accessible publicly
    }
    public static Foo CreateFoo() {
        // Do some stuff here that you can't normally do in a constructor.
        return new Foo();
    }
}

如果您使用私有构造仪来抑制仅包含静态成员的类自动生成的公共构造函数...请考虑使用类本身上的静态关键字来防止任何实例化:

public static class MyMethods
{
  public static void Go()
  {
///TODO
  }
}

相关内容

最新更新