C#密封类与没有公共构造函数

Joh*_*ank -1 c# constructor class sealed

我目前正在尝试深入了解.NET框架.当我想知道是否可以创建两个CommandManagers时,我遇到了一个错误:

Cannot create an instance of CommandManager because it has no public constructors.
Run Code Online (Sandbox Code Playgroud)

显然这意味着:不要这样做,而且有两个人甚至没有意义.现在我在收到消息之前遇到了另一个错误:

Cannot create an instance of ... because it is sealed
Run Code Online (Sandbox Code Playgroud)

禁止的效果是相同的,但有什么区别.为什么选择一个类没有公共构造函数而不是密封?

编辑:

对不起,我生病了几天.我进一步混合了两种语言:VB和C#.我打开了两个标签,忽略了一个站在C#上,一个站在VB Code上.一个班级被密封,另一个班级似乎是NonInheritable.我没有意识到这实际上是一样的.现在错误消息变得敏感.

IronPython代码片段:

commandManager = CommandManager()
Run Code Online (Sandbox Code Playgroud)

失败了

Cannot create instances of CommandManager because it has no public constructors
Run Code Online (Sandbox Code Playgroud)

而

class MyCommandManager(CommandManager):
    return super(MyCommandManager, self).__init__(*args, **kwargs)()
Run Code Online (Sandbox Code Playgroud)

失败了:

cannot derive from System.Windows.Input.CommandManager because it is sealed
Run Code Online (Sandbox Code Playgroud)

我被这些错误消息误导了,因为我的google和stackoverflow搜索没有回答(当然因为CommandManager总是密封在C#中而在VB中始终是NonInheritable)另外CommandManager似乎都是密封的并且没有公共构造函数.

Pau*_*ips 11

你密封一个类,以防止它被子类化.您删除公共构造函数以防止直接实例化类,通常作为单例模式的一部分.

当然,你可以将两者结合起来.