Asa*_*sad 88
对不起,你不能继承multiple classes.您可以使用接口或其组合one class and interface(s),其中接口应在签名中跟随类名.
interface A { }
interface B { }
class Base { }
class AnotherClass { }
Run Code Online (Sandbox Code Playgroud)
可能的继承方式:
class SomeClass : A, B { } // from multiple Interface(s)
class SomeClass : Base, B { } // from one Class and Interface(s)
Run Code Online (Sandbox Code Playgroud)
这不合法:
class SomeClass : Base, AnotherClass { }
Run Code Online (Sandbox Code Playgroud)
Bar*_*der 43
不,请改用接口!^.^
Liv*_* M. 20
C#不支持多重继承.
但是如果你想从两个来源"继承"行为,为什么不使用组合:
组成
和
依赖注入
有一个基本但重要的OOP原则说:"赞成组合而不是继承".
你可以创建一个这样的类:
public class MySuperClass
{
private IDependencyClass1 mDependency1;
private IDependencyClass2 mDependency2;
public MySuperClass(IDependencyClass1 dep1, IDependencyClass2 dep2)
{
mDependency1 = dep1;
mDependency2 = dep2;
}
private void MySuperMethodThatDoesSomethingComplex()
{
string s = mDependency1.GetMessage();
mDependency2.PrintMessage(s);
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,依赖项(接口的实际实现)是通过构造函数注入的.您的类不知道每个类是如何实现的,但它知道如何使用它们.因此,这里涉及的类之间存在松散耦合但具有相同的使用功率.
今天的趋势表明,继承是一种"时尚".
Gno*_*ght 13
C#3.5或更低版本不支持多重继承,但C#4.0可以通过使用我记忆中的动态来实现.
你不能在C#到3.5之前做多重继承.我不知道它是如何在4.0上运行的,因为我没有看过它,但@tbischel发布了一个我需要阅读的链接.
C#允许你通过接口进行"多重实现",这与"多重继承"完全不同
所以,你做不到:
class A{}
class B{}
class C : A, B{}
Run Code Online (Sandbox Code Playgroud)
但是,你可以这样做:
interface IA{}
interface IB{}
class C : IA, IB{}
Run Code Online (Sandbox Code Playgroud)
HTH
C#不支持类的多重继承,但是允许您继承/实现任意数量的接口。
这是非法的 (B,C,D和E都是类)
class A : B, C, D, E
{
}
Run Code Online (Sandbox Code Playgroud)
这是合法的 (IB,IC,ID和IE均为接口)
class A : IB, IC, ID, IE
{
}
Run Code Online (Sandbox Code Playgroud)
这是合法的 (B是类,IC,ID和IE是接口)
class A : B, IC, ID, IE
{
}
Run Code Online (Sandbox Code Playgroud)
组合而不是继承是一种设计模式,即使在支持多重继承的语言中,这种设计模式似乎也是有利的。