c# - 抽象类中的无主体抽象方法有什么问题?

标签 c# resharper abstract-class

我正在重构一个预先存在的解决方案。我使用 ReSharper,我注意到代码检查规则被触发。有一个抽象类具有无主体方法签名,目的是强制派生类(其中有几个)。据我所知,这是(或至少是)正确的做事方式。然而,ReSharper 提示说“永远不会通过基类型访问类型成员”并且“只使用 [方法] 的重写。”以下是复制相关问题的示例代码:

public abstract class MyAbstractClass
{
    public abstract void CreateSomething();
    public abstract void ReadSomething();
    public abstract void InsertSomething();
}

public class MyDerivedClass : MyAbstractClass
{

    public override void CreateSomething()
    {
        throw new NotImplementedException();
    }

    public override void ReadSomething()
    {
        throw new NotImplementedException();
    }

    public override void InsertSomething()
    {
        throw new NotImplementedException();
    }
}

顺便说一句,还有其他成员排除了将抽象类作为接口(interface)的可能性。 ReSharper 建议对抽象类中的 3 个方法进行更改。它的建议是使它们成为 protected 、虚拟的、非抽象的,或者简单地将它们从抽象类中删除,只在派生类中使用。最初编写此代码的人旨在让每个派生类实现这些方法,并让这些方法在派生类中公开。那么,有什么方法可以改变它以使其更有效吗?如果不是,为什么 ReSharper 对此提出异议?

最佳答案

因为您永远不会使用 MyAbstractClass 类型的引用来访问该方法,所以将它设为抽象成员是没有意义的——您可以将它完全排除在基类之外,一切都会正常编译。

关于c# - 抽象类中的无主体抽象方法有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31797880/

相关文章:

c# - 从同步方法调用异步方法

c# - 在 WPF/C# 中,如何检查中心按钮是否被单击或释放?

c# - 服务器的图像文件路径不是 C : drive MVC5

c# - 如何将复合类型传递给 PL/pgsql 函数?

c# - 关于实例化抽象类的子类的疑问

java - Eclipse - 悬停不显示抽象 Java 类中的变量

c# - 我能以某种方式告诉 Resharper ViewModel 的类型吗?

c# - ReSharper 建议将模式匹配代码更改为对象模式

visual-studio-2008 - 是否有 ReSharper 模板来生成基本方法?

python - 是否可以在 Python 中创建抽象类?