是否可以扩展2个类?

时间:2011-07-12 13:31:32

标签: c# .net

我有这些课程:

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 ()
    {

    }
}

有可能吗?或者我该怎么办?

5 个答案:

答案 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)

这是不可能的,但请看这个链接。

Simulated Multiple Inheritance Pattern

答案 4 :(得分:2)

使用界面

在c#类中多重继承不支持

也请参考

http://en.wikipedia.org/wiki/Multiple_inheritance