Возможно ли продлить 2 класса?

У меня есть следующие классы:

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

    }
}

Возможно ли это? Или что я могу сделать?

Ответ 1

В случае, когда вам нужно продлить два класса, вам может быть предложено использовать композицию над наследованием и использовать интерфейсы, как упомянуты другие ответы. Пример:

Начните с определения интерфейсов

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();
    }
}

Ответ 2

Это называется множественным наследованием. Вы можете найти более подробную информацию о Wikipedia - множественное наследование относительно предмета.

В некоторых языках поддерживается несколько наследований:

Языки, поддерживающие множественное наследование, включают в себя: С++, Common Lisp, Curl, Dylan, Eiffel, Logtalk, Object REXX, Scala, OCaml, Perl, Perl 6, POP-11, Python и Tcl

В С# интерфейсы могут использоваться для имитации множественного наследования:

Некоторые объектно-ориентированные языки, такие как С#, Java и Ruby реализуют единое наследование, хотя интерфейсы предоставляют некоторые функциональные возможности истинного множественного наследования.

Пример:

public class myClassData : myClassPageInterface, myClassControlInterface 
{
    // ...
}

Ответ 3

В С# невозможно наследовать несколько базовых классов. Вы можете реализовать два интерфейса или следовать некоторым обходным решениям (хотя это следует делать с осторожностью).

Ссылки: