c# - 为什么抽象类不能有密封方法

标签 c# oop abstract-class sealed

<分区>

Code Snippet 1 (Compilation Error) - A.M2() cannot be sealed because it is not an override

abstract class A
{
    public abstract void M1();

    public sealed void M2()
    {
        // Do Something
    }
}

Code Snippet 2 (Works Fine)

abstract class A
{
    public abstract void M1();

    public virtual void M2()
    {

    }
}

class B : A
{
    public sealed override void M1()
    {

    }

    public sealed override void M2()
    {

    }
}

问题 - 如果我在 Abstract class 本身中提供方法的实现,为什么 C# 不允许我将它标记为 Sealed,为什么它需要我在子类中覆盖,然后将其标记为密封。我无法理解这种差异

最佳答案

Sealed 关键字只能放在可覆盖的函数上。 您指定的该函数未声明为虚函数,因此不可覆盖。此外,将函数声明为“虚拟”和“密封”没有任何意义,因为密封抵消了“虚拟”

Sealed only 可以与“override”关键字一起使用,并阻止其他类自己覆盖函数。

关于c# - 为什么抽象类不能有密封方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50921701/

相关文章:

c# - 将 "old"xml 反序列化为新的类实例

c# - 使用 Visual Studio 连接远程 Mysql 数据库

c# - 将对象转换为正确的类型

java - 抽象类可以有final方法吗?

c# - 在 EF 上进行性能测试时的并发延迟

c# - 无法将类型 'x' 转换为类型 'y'。 LINQ to Entities 仅支持转换 EDM 原语或枚举类型

javascript - 在 javascript 函数中读取 Typescript 类成员

JavaScript - 使用 B.prototype=new A() 继承数组

java - 在 Java 中重写 toString() 时遇到问题

java - 在 Java 中克隆对象 [3 个问题]