2015-12-11 3 views
0

Это огромная проблема дизайна, с которой я часто сталкиваюсь, и я думаю, что это потому, что я не понимаю ООП.В производном классе, как иметь свойство производного типа от типа свойства в базовом классе?

Вот класс базового имущества:

public class BasePropety {} 

Вот тип моего DerivedProperty:

public class DerivedProperty : BaseProperty 
{ 
    public AClass A { get; set; } 
} 

Вот мой базовый класс:

public class BaseClass 
{ 
    public BaseProperty Property { get; set; } 
} 

Вот мой производный класс:

public class DerivedClass : BaseClass 
{ 
    public DerivedProperty Property { get; set; } 

    public void MethodExample() 
    { 
     AClass aValue = this.Property.A; 
    } 
} 

я мог бы, конечно, типаж мою собственность, но это раздражает:

public class DerivedClass : BaseClass 
{ 
    public void MethodExample() 
    { 
     var typedProperty = (DerivedProperty) this.Property; 
     AClass aValue = typedProperty.A; 
    } 
} 

Я знаю, что могу использовать новое ключевое слово, но я читал здесь и там, что это плохая практика, так как я полагаю, добиться этого? Должен ли я создать новое свойство?

Заранее благодарим за ответы.

ответ

6

Похоже, что вам нужно дженерики вместо:

public class BaseClass<T> where T : BaseProperty 
{ 
    public T Property { get; set; } 
} 

public class DerivedClass : BaseClass<DerivedProperty> 
{ 
    public void MethodExample() 
    { 
     AClass aValue = Property.A; 
    } 
} 

Обратите внимание, что это означает, что есть только один свойство - в то время как в текущем коде, вы на самом деле иметь два независимых свойства, которые происходят, чтобы иметь такое же имя. I подозреваемый вы этого не хотите.

+0

Это соответствует моей потребности. Я действительно не хотел, чтобы это выглядело так, как будто я хотел 2 независимых свойства. Спасибо за Ваш ответ. – Apollidore

Смежные вопросы