2016-08-21 121 views
-2

這就是我所擁有的。找到派生對象的類型。用對象類型混合定義字典

Class Parent 
Class Child1 
Class Child2 

Child1和Child2都從Parent派生。父不是抽象的,類不是靜態的。

我有兩個問題:

1)我希望能夠與父母,Child1和CHILD2對象的混合加載詞典。語法是什麼?

2)後來在運行時,我想在特定的字典索引調用的對象的特定功能。我如何知道對象的類型並訪問該功能?

+0

有沒有這樣的東西_「特定字典指數」 _。 .NET字典類是無序集合。至於其他方面,目前還不清楚你在問什麼。字典與基類/派生類關係中的其他語言沒有區別。你有什麼嘗試?你有什麼特別的問題?提供一個很好的[mcve],可以清楚地顯示這些問題的答案。 –

回答

0

要聲明,這將跨越這些類型的工作,你將宣佈一個字典的基本類型(家長)來操作一本字典[這適用於在.NET中許多集合類型,比如List等以同樣的方式。舉個例子:

var myDictionary = new Dictionary<string, Parent>(); 
myDictionary.Add("1", new Child1); 
myDictionary.Add("2", new Child2); 

後來,你可以遍歷該字典,拉一個鍵值對的,並檢查對象的類型,並做具體用它的東西。

foreach(var kvp in myDictionary){ 
    var currentObject = kvp.Value; 
    if(currentObject.GetType() == typeof(Child1)){ 
     var currentAsChild1 = currentObject as Child1; 
     //Do something special with this object a child1. 
     //I would put this block into its own method probably. 
    } 
} 

字典沒有你所說的「索引」,而是基於關鍵字。您可以嘗試獲取字典中特定鍵的值,並執行與上面的循環結構中顯示的邏輯類似的邏輯。

Parent test; 
if(myDictionary.TryGetValue("1", test){ 
    //Perform similar type checking logic here, cast the object to the derived type and perform the specific logic on that specific type. 
} 

你需要做的一個重要考慮因素是你是否真的需要這樣做。我的一個建議是,你考慮使用一個接口或一個抽象類,所以你不需要首先這樣做。要問自己的另一個問題是這些派生類型真的派生類型?它們是否適合創建派生類型的「是」一個名字?如果你可以提取一個通用的方法調用,我會在基類中創建一個抽象方法或者實現一個接口,所以你不必像這樣寫邏輯,因爲它很脆弱(難以改變)。

字典上的一些基本概況位可以在這裏找到與使用它們更多的例子:dotnetpearls