相关疑难解决方法(0)

为什么我不能继承静态类?

我有几个不需要任何州的课程.从组织的角度来看,我想把它们放到层次结构中.

但似乎我无法为静态类声明继承.

像这样的东西:

public static class Base
{
}

public static class Inherited : Base
{
}
Run Code Online (Sandbox Code Playgroud)

不管用.

为什么语言的设计者会关闭这种可能性?

c# inheritance static

216
推荐指数
3
解决办法
14万
查看次数

为什么静态类密封?

我理解静态类和密封类是什么,我经常使用扩展方法,我只是想知道 - 有谁知道为什么静态类被密封在C#中?

我已经看过MSDN和C#语言规范,但它从未真正说明为什么它们被密封了.

为什么我们不能继承静态类并覆盖静态成员等?

编辑:

我很感激你的答案,但你还在谈论静态类什么.我知道为什么我不能覆盖它的方法.但是我问他们为什么这么做?

vtable真的那么贵吗?为什么要设计语言,所以静态类实际上是静态的?它只是为了传统吗?我还没有看到另一个优势吗?

(我有偷偷摸摸的怀疑,我从根本上误解了静态课程的重点.)

c# oop types

6
推荐指数
2
解决办法
578
查看次数

5
推荐指数
1
解决办法
1万
查看次数

在OOP和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)

谢谢

c# oop

2
推荐指数
3
解决办法
3912
查看次数

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

我目前正在尝试深入了解.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似乎都是密封的并且没有公共构造函数.

c# constructor class sealed

-1
推荐指数
1
解决办法
8295
查看次数