声明无法实例化的类有哪些方法?

时间:2015-10-08 07:01:02

标签: c# .net class instance instantiation

创建不可实例化的类有哪些方法?一种方法是将其声明为抽象类。是否可以通过将类构造函数设置为私有来实现?是密封类,不可实例化?并且,有没有其他方法可以在C#中做到这一点?

4 个答案:

答案 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

请参阅sealed (C# reference)