我经常发现我需要以下内容:
public interface IMyThing
{
void Function1();
void Function2();
void Function3();
void Function4();
void Function5();
}
public abstract class BaseMyThing : IMyThing
{
// Implement a version of Function1, but Function 2-5 is up to the concrete class to do
public void Function1()
{
// Do stuff.
}
public virtual void Function2();
public virtual void Function3();
public virtual void Function4();
public virtual void Function5();
}
public class ConcreteMyThing : BaseMyThing, IMyThing
{
public new void Function2() { /* something */ }
public new void Function3() { /* something */ }
public new void Function4() { /* something */ }
public new void Function5() { /* something */ }
}
这变得相当烦人 - 每当我向界面添加内容时,我必须在抽象类中将其存根。这不是世界末日,但我很好奇,如果我在这里做一些不太理想的事情 - 是否有更好的方法来获得共享代码位的部分功能?
答案 0 :(得分:2)
考虑是否从界面派生基类适用于您的情况。
您不需要从界面派生您的基类。只需使它在派生类中提供共享功能和实现接口(匹配方法将通过接口从基类中自动获取)。
答案 1 :(得分:1)
我看不出在IMyThing
中实施BaseMyThing
的任何理由:
public interface IMyThing
{
void Function2();
void Function3();
void Function4();
void Function5();
}
public abstract class BaseMyThing
{
public void Function1() {}
}
public class ConcreteMyThing : BaseMyThing, IMyThing
{
public void Function2() { }
public void Function3() { }
public void Function4() { }
public void Function5() { }
}
答案 2 :(得分:0)
我假设Function2到Function5不是在基类中使用,而是在派生类中使用。然后它不应该添加到IMyThing
中,而应该每个都有一个单独的接口。
示例:
public interface IMyThing
{
void Function1();
}
public abstract class BaseMyThing : IMyThing
{
// Implement a version of Function1, but Function 2-5 is up to the concrete class to do
public void Function1()
{
// Do stuff.
}
}
public interface IMyThingConcrete{
void FunctionConcrete();
}
public class ConcreteMyThing : BaseMyThing, IMyThingConcrete
{
public void FunctionConcrete() { /* something */ }
}
此外,您不需要在ConcreteMyThing中重新实现IMyThing,它已经实现了IMyThing,因为它继承了BaseMyThing。
从ConcreteMyThing访问FunctionConcrete的示例:
public void AccessFunctionConcrete(IMyThingConcrete myThing){
myThing.FunctionConcrete();
}