创建不可实例化的类有哪些方法?一种方法是将其声明为抽象类。是否可以通过将类构造函数设置为私有来实现?是密封类,不可实例化?并且,有没有其他方法可以在C#中做到这一点?
答案 0 :(得分:7)
将类标记为抽象或静态(它们是互斥的)是唯一的两种方法。将所有构造函数标记为私有不会使类无法实现,因为类仍然可以构造自身,而其他构造函数也可以通过反射来完成。
答案 1 :(得分:2)
这里只有static
看起来像完整的解决方案,因为当实例化继承自它的类实例时,abstract
类仍然可以被实例化。考虑一下情景:
abstract class A { }
class B : A { }
somewhere in code :
B instance = new B(); // this creates instance of class A as well
P.S。
起初我虽然abstract sealed
也可能解决这个问题,但使用这样的结构并没有多大意义,所以它甚至不能编译:
Error 1 'A': an abstract class cannot be sealed or static D:\Projects\TEST\Testapp\Program.cs 15 27 ITT.Domain
答案 2 :(得分:1)
正如其他人所回答的那样,抽象和静态类无法实例化,但是具有私有构造函数的类可以使用公共成员函数。这就是singleton 模式的工作原理
答案 3 :(得分:1)
内部类仅在程序集内部可见,因此无法在此程序集之外实例化。
但据我所知,你仍然可以通过反射创建一个实例。 您可以通过ReflectionPermission Class
停用反射如上所述,您可以将其声明为 abstract 或添加抽象方法。
如果你只想申报合同,你可以使用一个界面,但这根本不是一个类。
密封表示您无法继承此类
每个应用程序只能创建一次singleton 类 singleton