我正在重构一个已有的解决方案。我使用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对此有疑问?
答案 0 :(得分:3)
因为你永远不会使用MyAbstractClass类型的引用来访问该方法,所以将它作为一个抽象成员是没有意义的 - 你可以将它完全从基类中删除,并且所有内容都可以正常编译。