声明不能实例化的类的方法有哪些?
本文关键字:不能 实例化 声明 方法 | 更新日期: 2023-09-27 18:16:30
创建非实例化类的方法是什么?一种方法是将其声明为抽象类。是否可以通过使类构造函数为私有来做到这一点?密封类是不可实例化的吗?在c#中还有其他的方法吗?
将类标记为抽象或静态(它们是互斥的)是仅有的两种方法。将所有构造函数标记为私有并不会使类不可实例化,因为类仍然可以构造自己,并且其他类可能能够通过反射来实现。
只有static
看起来是完整的解决方案,因为abstract
类仍然可以在继承它的类实例实例化时实例化。考虑以下场景:
abstract class A { }
class B : A { }
somewhere in code :
B instance = new B(); // this creates instance of class A as well
注:起初,我认为abstract sealed
可能是这个问题的解决方案,但它没有多大意义,使用这样的结构,所以它甚至不编译:
Error 1 'A': an abstract class cannot be sealed or static D:'Projects'TEST'Testapp'Program.cs 15 27 ITT.Domain
正如其他人的回答,抽象类和静态类不能被实例化,但是具有私有构造函数的类可以通过使用公共成员函数来实例化。这就是单例模式的工作方式
内部类仅在程序集中可见,因此不能在该程序集之外实例化。
但据我所知,你仍然可以通过反射创建一个实例。你可以通过ReflectionPermission类禁用反射
如上所述,您可以将其声明为abstract或添加一个抽象方法。
如果你只想声明一个契约,你可以使用接口,但那根本不是类。
sealed意味着你不能继承这个类
单例类只能在每个应用程序中创建一次单例
参见sealed (c# reference)