有可能一次扩展两个类吗?



我有这些类:

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

最新更新