有可能一次扩展两个类吗?
本文关键字:两个 扩展 一次 有可能 | 更新日期: 2023-09-27 18:01:55
我有这些类:
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 ()
{
}
}
是可能做到这一点,还是我可以做其他事情?
在需要扩展两个类的情况下,您可能会倾向于组合而不是继承,并像其他答案提到的那样使用接口。示例:
从定义接口开始
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();
}
}
这叫做多重继承。您可以在维基百科-关于该主题的多重继承上找到更多信息。
在某些语言中支持多重继承:
支持多重继承的语言包括: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
{
// ...
}
在c#中不可能继承多个基类。您可以实现两个接口,或者遵循一些变通方法(尽管这样做应该谨慎)。
链接:
- c#中的多重继承:MI方法的讨论和对"组合"的良好描述。
- 代码项目:解决 的一个示例
- C-SharpCorner:多重继承的一些替代
这是不可能的,但是看看这个链接。
模拟多重继承模式
use interface
多重继承不支持也可参考
http://en.wikipedia.org/wiki/Multiple_inheritance