我有这些课程:
public class myClassPage : System.Web.UI.Page
{
public myClassPage ()
{
}
}
public class myClassControl : System.Web.UI.UserControl
{
public myClassControl ()
{
}
}
Run Code Online (Sandbox Code Playgroud)
我想要另一个扩展这些课程的课程,例如:
public class myClassData : myClassPage, myClassControl
{
public myClassData ()
{
}
}
Run Code Online (Sandbox Code Playgroud)
可能吗?或者我该怎么办?
Ant*_*ram 22
在您需要扩展两个类的情况下,您可能会倾向于使用组合而不是继承,并且可以像其他答案所提到的那样使用接口.一个例子:
首先确定您的界面
interface IFoo
{
void A();
}
interface IBar
{
void B();
}
Run Code Online (Sandbox Code Playgroud)
然后创建实现每个接口的具体类
class Foo : IFoo
{
public void A()
{
// code
}
}
class Bar : IBar
{
public void B()
{
// code
}
}
Run Code Online (Sandbox Code Playgroud)
最后,在您希望展示这两组行为的类中,您可以实现每个接口,但使用具体类组合实现.
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();
}
}
Run Code Online (Sandbox Code Playgroud)
Cyr*_*don 16
这称为多重继承.您可以在维基百科上找到更多信息-关于该主题的多重继承.
某些语言支持多重继承:
支持多重继承的语言包括:C++,Common Lisp的,卷曲,迪伦,艾菲尔,Logtalk,对象REXX,Scala中,OCaml中,Perl中,Perl 6中,POP-11,Python和Tcl的
在C#中,接口可用于模仿多重继承:
一些面向对象的语言,如C#,Java和Ruby实现单继承,尽管接口提供了真正的多重继承的一些功能.
例:
public class myClassData : myClassPageInterface, myClassControlInterface
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
在C#中继承多个基类是不可能的.您可以实现两个接口,或者遵循一些解决方法(尽管这应该谨慎进行).
链接: