abstract class 中的无主体抽象方法有什么问题?

What's wrong with bodyless abstract methods in abstract class?

我正在重构一个预先存在的解决方案。我使用 ReSharper,我注意到代码检查规则被触发。有一个抽象 class 具有无主体方法签名,目的是强制派生 classes(其中有几个)。据我所知,这是(或至少是)正确的做事方式。但是,ReSharper 抱怨 "Type member is never accessed via base type" 和 "Only overrides of [the methods] are used." 以下是复制相关问题的示例代码:

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();
    }
}

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

因为您永远不会使用 MyAbstractClass 类型的引用来访问该方法,所以将其设为抽象成员毫无意义——您可以将其完全排除在基础 class 之外,所有内容都会编译美好的。