抽象类中无体抽象方法有什么问题?

时间:2015-08-03 22:37:52

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

顺便说一句,还有其他成员排除了使抽象类成为一个接口。 ReSharper建议对抽象类中的3个方法进行更改。它的建议是使它们受保护,虚拟,非抽象或简单地从抽象类中删除它们,并且只在派生类中使用它们。最初为每个派生类编写此代码以实现这些方法的人,以及那些在派生类中公开的方法。那么,有什么方法可以改变它以使其更有效?如果没有,为什么ReSharper对此有疑问?

1 个答案:

答案 0 :(得分:3)

因为你永远不会使用MyAbstractClass类型的引用来访问该方法,所以将它作为一个抽象成员是没有意义的 - 你可以将它完全从基类中删除,并且所有内容都可以正常编译。