0

例如,我有两个课程:

Class A
{
  string property1;
  string property2;
}

Class B : A
{
  string property3;
  string property4;
  ....
} 

所以 B 继承了类 A 的属性。他们坐在一个列表里,那是一本字典

Dictionary <string, List<A>> myDictionary = new Dictionary<string, List<A>>();

List<A> myList = new List<A>();

有一个字典,包含许多列表,都包含 A 类和 B 类对象的混合。循环时,我试图从 B 类对象中访问一些属性,我有一个 if 语句来查找它们,但程序仍然认为它们是 A 类类型,并在我尝试使用 property3 或 property4 时抛出错误。例如:

string key = string key in dictionary;
string index = object position in list;

myDictionary[key][index].property3.someMethod();

有没有办法告诉程序这是一个 B 类对象并允许使用属性 3 和 4?

4

1 回答 1

5

将对象安全地转换为 B 型对象,然后检查 null

var obj = myDictionary[key][index];

var bObj = obj as B;
if (bObj != null)
{
     bObj.someMethod();
}

虽然,我也可能会说您的设计似乎已关闭。通常情况下,我不会期待这样的事情。通常,如果您使用继承,您会想要一个允许它们互换使用的设计。例如,您可能将 A 上的行为实现为无操作,但在 B 上覆盖它以实际执行某些操作。这将使消费类不必关心“A”事物是真正的 A 还是 B 实例。

于 2012-11-21T22:27:44.200 回答