2012-06-06 78 views
0

我目前的代碼看起來有點像這樣。使用屬性來引用派生類成員變量到基類成員變量

class BaseClass2 
{ 
    public List<BaseClass1> list { get; set; } 
} 

class DerivedClass2 : BaseClass2 
{ 
    public DerivedClass1A objA { get; set; } 
    public DerivedClass1B objB { get; set; } 
} 

什麼,我已經是一個DerivedClass2那裏,我認識的類型在基類列表中,我知道會有兩種DerivedClass1A和DerivedClass1B的。

我可以像上面那樣創建新的變量,但我不想使用內存和巧妙地訪問和設置原始列表,我怎麼能做到這一點?

感謝

回答

0

你的意思是什麼喜歡這個?

class DerivedClass2 : BaseClass2 
{ 
    public DerivedClass1A objA 
    { 
     get 
     { 
      return (DerivedClass1A)base.list[0]; 
     } 
     set 
     { 
      base.list[0] = value; 
     } 
    } 

    public DerivedClass1B objB 
    { 
     get 
     { 
      return (DerivedClass1B)base.list[1]; 
     } 
     set 
     { 
      base.list[1] = value; 
     } 
    } 
} 

雖然這不是一個好的設計......爲什麼你會有這個列表?你真的想做什麼?

+0

你確定列表中只有2個元素嗎? –

+0

@JakubKonecki號我說這是一件壞事。但這是一個如何去做我理解他想要的東西的例子。 – SimpleVar

+0

是2個元素。這是我正在得到的,只需要想,如果這恰好符合我想要的...... – gwizardry

1

您可以使用泛型:

class BaseClass2<T> 
    T : BaseClass1 
{ 
    public List<T> list { get; set; } 
} 

class DerivedClass2 : BaseClass2<BaseClass1> 
{ 
    public DerivedClass1A objA { get; set; } 
    public DerivedClass1B objB { get; set; } 
} 

或者,如果你只是想從你的列表中的子類,你可以使用TypeOf()方法:

baseClass2Instance.list.TypeOf<DerivedClass1A>(); 
+0

這並沒有改變他的狀況。 – SimpleVar

+0

更新了我的答案 - 問題對我來說不是很清楚... –

+0

我同意。我想我們的答案會有所幫助。無論哪種方式,如果他告訴我們情況真的是什麼,我敢打賭有一個更好的方法來做到這一點。 – SimpleVar