C#带接口的多重继承
如何避免类C中的重复代码。引用:。我不想在C类中再次编写完整的方法。感谢您的帮助。请注意,您根本没有实现多重继承。C#具有单数继承性。您正在实现多个接口 绝对没有理由不能在类C#带接口的多重继承,c#,asp.net,multiple-inheritance,C#,Asp.net,Multiple Inheritance,如何避免类C中的重复代码。引用:。我不想在C类中再次编写完整的方法。感谢您的帮助。请注意,您根本没有实现多重继承。C#具有单数继承性。您正在实现多个接口 绝对没有理由不能在类A和B中实现接口,然后让B派生自A和C派生自B。接口的方法实现甚至可以是抽象的,这迫使子类执行实现。如果您遵循这种方法,那么您仍然可以通过强制转换或使用as关键字,将C作为IA或IB传递 您还可以使用接口IB“继承”1(实现)IA,这意味着实现IB的任何东西也必须实现IA 1当IB派生自IA时,它不像在类级别那样是继承,实
A
和B
中实现接口,然后让B
派生自A
和C
派生自B。接口的方法实现甚至可以是抽象的,这迫使子类执行实现。如果您遵循这种方法,那么您仍然可以通过强制转换或使用as
关键字,将C
作为IA
或IB
传递
您还可以使用接口IB
“继承”1(实现)IA
,这意味着实现IB
的任何东西也必须实现IA
1当
IB
派生自IA
时,它不像在类级别那样是继承,实际上它仍然是实现。因此,IB
实现了IA
,它不继承它。假设IA.Calculate()
与IB.Calculate()
不同,因此不能只让IB
继承IA
,通过在A
和B
的私有实例上委派执行,可以在C
中实现这两个接口:
public interface IA
{
void DoSomething();
void Calculate();
}
public interface IB
{
void DoSomethingElse();
void Calculate();
}
public class A : IA
{
void DoSomething() { }
void Calculate() {}
}
public class B : IB
{
void DoSomethingElse() { }
void Calculate() {}
}
public class C : IA, IB
{
//How can I implement Calculate() in class B and DoSomething() in class A?
}
但你不是在“再次编写完整的方法”。很明显,您正在使用委托并将实现传递给
A
和B
的嵌入式实例。是的,您是对的。对不起,也许我用词不对。在C类中,如果possible@KevenDiuliy ? 您希望如何使用类型转换?我想你一定是指别的什么。我想在你的示例类C
中,你需要显式地实现IA.Calculate()
和IB.Calculate()
。嘿,感谢你的回答,当我试图编译它时,它说“exe不包含适合入口点的静态“Main”方法”。需要在这里添加吗?再次感谢这只是类C
的定义,很像您在问题中定义的。代码的其余部分(其他类/接口定义、主方法等)与问题中的代码相同
public class C : IA, IB
{
private A _a;
private B _b;
public C()
{
this._a = new A();
this._b = new B();
}
public void DoSomething()
{
this._a.DoSomething();
}
void IA.Calculate()
{
this._a.Calculate();
}
public void DoSomethingElse()
{
this._b.DoSomethingElse();
}
void IB.Calculate()
{
this._b.Calculate();
}
}