找到派生对象的类型。使用对象类型的混合定义Dictionary

时间:2016-08-21 03:51:35

标签: c#

这就是我所拥有的。

Class Parent
Class Child1
Class Child2

Child1和Child2都来自Parent。父不是抽象的,类不是静态的。

我有两个问题:

1)我希望能够使用Parent,Child1和Child2对象的混合加载Dictionary。语法是什么?

2)稍后在运行时我想在特定的Dictionary索引处调用对象的特定函数。我怎么知道对象的类型和访问该函数?

1 个答案:

答案 0 :(得分:0)

要声明将跨这些类型操作的字典,您将声明一个字典以使用基本类型(Parent)进行操作[这与.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.
     }
}

词典没有你所谓的&#34;索引&#34;,而是基于密钥。您可以尝试获取字典中特定键的值,并执行与上面循环结构中显示的逻辑类似的逻辑。

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.
}

你需要做的一个重要考虑因素是你真的需要这样做吗?我的一个建议是你考虑使用界面或抽象类,所以你不需要首先这样做。另一个要问自己的问题是这些衍生类型真的是派生类型吗?他们是否适合&#34;是&#34;用于创建派生类型的名字对象?如果你可以提取一个常见的方法契约来调用我会在基类中创建一个抽象方法或实现一个接口,这样你就不必编写这样的逻辑,因为它非常脆弱(不能改变)

可以在此处找到关于字典的一些基本概述位,并提供更多使用它们的示例:dotnetpearls