它仍然要求您始终在接口中重新键入实际上不应该在类之间更改的方法
一点也不。您只需在基类上实现接口,实现将实现该接口的所有类中通用的方法,然后将其余部分声明为abstract
- 这会强制派生类实现它。
public interface MyInterface
{
void SomeCommonMethod(object whatever);
void SomeSpecialisedMethod(int someOtherParameter);
}
public abstract class MyBaseClass : MyInterface
{
public void SomeCommonMethod(object whatever)
{
//do some stuff
}
public abstract void SomeSpecialisedMethod(int someOtherParameter);
}
public class SomeSpecialisedClass : MyBaseClass
{
public override void SomeSpecialisedMethod(int someOtherParameter)
{
//do stuff that can't be done in the base class
}
}
这显示了如何避免在所有需要它的类中无休止地“重新键入”接口实现。
话虽如此,使用接口并不等同于多重继承。在 C# 的早期,对此有很多讨论,普遍的共识是,在现实世界中实际上很少需要多重继承。我个人在我的职业生涯中只真正需要过几次,在这些情况下,有足够的解决方法——多重继承本来是一种更清洁的方法。
我唯一想要的接口是它们在多重继承时的自由通行证
跟我重复一遍: 接口中也没有多重继承。
一个接口可以实现多个其他接口,也可以定义自己的需求(契约),但绝不是继承。您可以近似多重继承,但无法实现正确的多重继承。