我有几个不需要任何州的课程.从组织的角度来看,我想把它们放到层次结构中.
但似乎我无法为静态类声明继承.
像这样的东西:
public static class Base
{
}
public static class Inherited : Base
{
}
Run Code Online (Sandbox Code Playgroud)
不管用.
为什么语言的设计者会关闭这种可能性?
我理解静态类和密封类是什么,我经常使用扩展方法,我只是想知道 - 有谁知道为什么静态类被密封在C#中?
我已经看过MSDN和C#语言规范,但它从未真正说明为什么它们被密封了.
为什么我们不能继承静态类并覆盖静态成员等?
编辑:
我很感激你的答案,但你还在谈论静态类是什么.我知道为什么我不能覆盖它的方法.但是我问他们为什么这么做?
vtable真的那么贵吗?为什么要设计语言,所以静态类实际上是静态的?它只是为了传统吗?我还没有看到另一个优势吗?
(我有偷偷摸摸的怀疑,我从根本上误解了静态课程的重点.)
为什么抽象类不能密封或静态?我也对此问题感到困惑为什么在C#中将静态类声明为密封和抽象?
我得到了密封抽象类的示例代码.我只是知道密封抽象类的用途是什么.无论什么是必须扩展的抽象和密封关键字阻止扩展类.因此当类被密封和抽象时,它可以被扩展并且也被实例化.那么密封抽象类的真正用途是什么呢?
有人告诉我它会解决静态类的目的.如果可能的话,当需要将类设计为密封的抽象类时,请讨论密封抽象类的使用,其中包含少量示例代码和场景.
sealed abstract class BaseBook : IBook
{
private string _title;
public virtual string Author
{
get
{
Console.WriteLine("Base book GET!");
return _title;
}
set
{
Console.WriteLine("Base book SET!");
_title = value;
}
}
public string Title
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我目前正在尝试深入了解.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似乎都是密封的并且没有公共构造函数.