gpt4 book ai didi

c# - 静态构造函数和私有(private)构造函数之间的主要区别是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:34 25 4
gpt4 key购买 nike

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

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

但是,Private Constructor是用来限制一个类被实例化和被继承的。只要类仅包含静态成员,就使用私有(private)构造函数。

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

最佳答案

私有(private)构造函数仍然是实例构造函数——它们不是静态的。它们与公共(public)构造函数没有什么不同,只是它们定义了谁可以调用它们,就像公共(public)和私有(private)常规方法之间的区别一样。

私有(private)构造函数的一些可能用例是单例、其功能由多个公共(public)构造函数共享的私有(private)构造函数,或者使用静态方法而不是构造函数来构建您的类。

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();
}
}

关于c# - 静态构造函数和私有(private)构造函数之间的主要区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30331957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com