c# - .net 抽象覆盖怪癖

标签 c# .net

假设我有以下 C# 类:

abstract class a
{
    protected abstract void SomeMethod();
}

abstract class b : a
{
    protected abstract override void SomeMethod();
}

class c : b
{
    protected override void SomeMethod()
    {

    }
}

重写 b 中的方法实际上有什么意义,因为它可以很容易地写成:

abstract class b : a
{
}

写 b 的“首选”方式是什么?如果重写抽象方法或属性没有意义,为什么允许重写?

最佳答案

您可能想要允许它的一个原因是:它显示了意图。它解释说是的,你知道这个方法在基类中是抽象的。我知道这一点,而且我仍然希望它在这里是抽象的。

那样的话,如果基类删除了该方法,您的抽象类将无法编译,而不仅仅是具体类(它甚至可能不在您的代码中)。

也就是说,这不是一个特别重要的原因......我通常会忽略它。

关于c# - .net 抽象覆盖怪癖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1125452/

相关文章:

c# - C# 中数组的子集

c# - Visual Studio 2010想要将项目作为类库启动

.net - 如何将 Azure 应用服务的访问权限限制为仅在 Azure Ad 的用户和组设置中添加的用户?

c# - 如何在 Linq To Sql 查询中重用 where 子句

c# - 如何获取枚举的自定义属性值?

asp.net - .Net CLR 如何识别哪个 .DLL 是 Web 应用程序中的主(启动)DLL?

.net - 如何使用 Linq 将实体表与交叉引用表连接起来

c# - 在您的业务逻辑中使用反射是好的做法吗?

c# - 将 List<object> 转换为 AnonymousTypes 列表

c# - 仅对具有最小长度的数字进行 RegEx 验证