Возможно ли продлить 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
В С# невозможно наследовать несколько базовых классов. Вы можете реализовать два интерфейса или следовать некоторым обходным решениям (хотя это следует делать с осторожностью).
Ссылки:
Ответ 4
Это невозможно, но посмотрите на эту ссылку.
Имитированный шаблон множественного наследования
Ответ 5
использовать интерфейс
в классе С# Множественное наследование не поддерживается
также ссылаются
http://en.wikipedia.org/wiki/Multiple_inheritance