這就是我所擁有的。找到派生對象的類型。用對象類型混合定義字典
Class Parent
Class Child1
Class Child2
Child1和Child2都從Parent派生。父不是抽象的,類不是靜態的。
我有兩個問題:
1)我希望能夠與父母,Child1和CHILD2對象的混合加載詞典。語法是什麼?
2)後來在運行時,我想在特定的字典索引調用的對象的特定功能。我如何知道對象的類型並訪問該功能?
這就是我所擁有的。找到派生對象的類型。用對象類型混合定義字典
Class Parent
Class Child1
Class Child2
Child1和Child2都從Parent派生。父不是抽象的,類不是靜態的。
我有兩個問題:
1)我希望能夠與父母,Child1和CHILD2對象的混合加載詞典。語法是什麼?
2)後來在運行時,我想在特定的字典索引調用的對象的特定功能。我如何知道對象的類型並訪問該功能?
要聲明,這將跨越這些類型的工作,你將宣佈一個字典的基本類型(家長)來操作一本字典[這適用於在.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
有沒有這樣的東西_「特定字典指數」 _。 .NET字典類是無序集合。至於其他方面,目前還不清楚你在問什麼。字典與基類/派生類關係中的其他語言沒有區別。你有什麼嘗試?你有什麼特別的問題?提供一個很好的[mcve],可以清楚地顯示這些問題的答案。 –