我有这些课程:
public class myClassPage : System.Web.UI.Page
{
public myClassPage ()
{
}
}
public class myClassControl : System.Web.UI.UserControl
{
public myClassControl ()
{
}
}
我希望有另一个扩展这些类的类,比如:
public class myClassData : myClassPage, myClassControl
{
public myClassData ()
{
}
}
有可能吗?或者我该怎么办?
答案 0 :(得分:23)
在您需要扩展两个类的情况下,您可能会倾向于使用组合而不是继承,并且可以像其他答案所提到的那样使用接口。一个例子:
首先确定界面
interface IFoo
{
void A();
}
interface IBar
{
void B();
}
然后创建实现每个接口的具体类
class Foo : IFoo
{
public void A()
{
// code
}
}
class Bar : IBar
{
public void B()
{
// code
}
}
最后,在您希望展示这两组行为的类中,您可以实现每个接口,但使用具体类组成实现。
public class Baz : IFoo, IBar
{
IFoo foo = new Foo(); // or inject
IBar bar = new Bar(); // or inject
public void A()
{
foo.A();
}
public void B()
{
bar.B();
}
}
答案 1 :(得分:16)
这称为多重继承。您可以在Wikipedia - Multiple inheritance上找到有关该主题的更多信息。
某些语言支持多重继承:
支持多重继承的语言包括:C ++,Common Lisp,Curl,Dylan,Eiffel,Logtalk,Object REXX,Scala,OCaml,Perl,Perl 6,POP-11,Python和Tcl
在C#中,接口可用于模仿多重继承:
一些面向对象的语言,例如 C#,Java和Ruby实现了单继承,尽管接口提供了一些真正的多重继承功能。
示例:
public class myClassData : myClassPageInterface, myClassControlInterface
{
// ...
}
答案 2 :(得分:5)
无法在C#中继承多个基类。您可以实现两个接口,或者遵循一些解决方法(尽管这应该谨慎处理)。
链接:
答案 3 :(得分:3)
这是不可能的,但请看这个链接。
答案 4 :(得分:2)