2013-07-01 3 views
0

У меня есть объекты BaseObject и DerivedObject. Затем я хочу дать BaseObject BaseContainer, и предоставить DerivedObject DerivedContainer.Параллельное наследование

(DerivedObject: BaseObject, DerivedContainer: BaseContainer)

Например, используя ключевое слово new:

BaseObject:

общественного BaseContainer Контейнер {получить; набор;}

DerivedObject:

public new DerivedContainer Container 
{ 
    get { return (DerivedContainer)base.Container; } 
    set { base.Container = value; 
     //Some extra things that MUST be called 
     } 
} 

virtual и override не будет работать, потому что вы не можете изменить тип возврата (get; терпит неудачу). new не работает, если я делаю ((BaseObject)myDerivedObject).Container = something, потому что он не вызывает дополнительный код (часть комментария) в DerivedObject.Container__set.

Я знаю, что могу сделать свойство get -одно, использовать new и добавить метод виртуального сеттера (в любом случае тип возврата недействителен, поэтому я могу переопределить его), но мне было интересно, существует ли какой-либо способ этого.

ответ

1

Вы можете использовать дженерики.

class Base<TContainer> where TContainer : Container 
{ 
    TContainer Container { get; set; } 
} 

class Derived : Base<DerivedContainer> { } 
Смежные вопросы