2014-11-26 5 views
0

У меня есть класс иерархии следующим образом:Как преобразовать абстрактный базовый класс в общий производный класс и свойства доступа дочернего класса?

[DataContract] 
[Serializable] 
[KnownType(typeof(ChildClass2<>))] 
public abstract class BaseClass 
{ 
    protected BaseClass(string property1) 
    { 
     this.Property1 = property1; 
    } 

    [DataMember] 
    public string Property1 { get; private set; } 

    public abstract bool Method1(string inputValue); 
} 


[DataContract] 
[Serializable] 
public abstract class ChildClass1<T> : BaseClass 
{ 
    protected ChildClass1(string property1, T property2) : base(property1) 
    { 
     this.Property2 = property2; 
    } 

    [DataMember] 
    public T Property2 { get; private set; } 
} 


[DataContract] 
[Serializable] 
public class ChildClass2<T> : ChildClass1<T> 
{ 
    public ChildClass2(string proprty1, T property2) 
     : base(property1, property2) 
    { 
    } 

    public override bool Method1(string inputValue) 
    { 
     // Some processing.... 

    } 
} 

Теперь я инстанцировании ChildClass2 как тип BaseClass, как показано ниже:

BaseClass baseClass = ChildClass2<string>("test1", "test2"); 

Как я могу бросить BaseClass типу ChildClass2 таким образом я могу получить доступ к baseClass.Property2 ?

Я пробовал что-то вроде (ChildClass2) baseClass.Property2 не работает.

+1

'BaseClass BaseClass = ChildClass2 («test1»,«test2»);' не будет компилироваться не поставляется тип для T. –

+0

Я думаю, что это на основе параметра типа, однако установил ее в вопрос. – Steelbird

ответ

0
BaseClass baseClass = ChildClass2<string>("test1", "test2"); 
string value = ((ChildClass2<string>) baseClass).Property2; 
+0

Спасибо, что работает – Steelbird

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