是否可以扩展2个类?

mar*_*zzz 16 .net c#

我有这些课程:

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)


use*_*939 5

在C#中继承多个基类是不可能的.您可以实现两个接口,或者遵循一些解决方法(尽管这应该谨慎进行).

链接: