【发布时间】:2019-08-27 22:24:27
【问题描述】:
我有一个非常基本的问题:继承。我是新手。
我有一个基类:
public class base1
{
public int common {get; set;}
}
我有一堆派生类,其中两个是
public class derived1 : base1
{
public int prop1 {get; set;}
}
和
public class derived2 : base1
{
public int prop2 {get; set;}
}
我想像这样在第三类中使用这些,但我得到一个错误:
public class usageclass
{
public List<base1> Data;
public usageclass()
{
Data = new List<base1>();
derived1 d1 = new derived1();
d1.common = 0;
d1.prop1 = 1;
Data.Add(d1);
derived2 d2 = new derived2();
d2.common = Data[0].common + 10;
d2.prop2 = Data[0].prop1 + 10; //<--- this line doesn work. see below.
Data.Add(d2);
}
}
在指向Data[0] 的监视窗口或对象资源管理器中,我可以看到prop1,但是如果我输入Data[0].prop1,它会告诉我prop1 不存在。我猜这是因为我有Data 作为base1 的列表,而不是派生类,但是我该如何实现呢?我的最终目标是让usageclass 拥有一个类型为List 的不同对象的属性,我的想法是让它们派生自同一个基类可以实现这一点。为什么我可以在对象资源管理器中看到所有内容,但在输入时却看不到。
谢谢!
【问题讨论】:
-
我认为您需要做的是在访问列表元素时,您必须使用 .GetType() 之类的东西检查类型,然后将您的对象转换为正确的派生类型,您应该有你的属性
-
Data是List<base1>,而base1没有.prop1属性。
标签: c# inheritance