问题描述
- C#子类对象存放在父类数组里面,提出时要不要先转成子类型
-
//这是我们要计算价格的方法
public double totalMoney(ProductFather[] pf) {
double money = 0;
foreach (var item in pf)
{
money += item.Price;
}
return money;
}
ProductFather是父类,有几个商品类继承他,每个商品类里面都有double price价格属性
,那么如上面,我遍历这个父类数组,计算里面商品的总价格,子类对象放入父类数组,那么类型不是ProductFather类型了吗?我们这个item.Price前面是不是要判断他是啥子类型,然后再强转比如(子类)item.Price
解决方案
money += item.Price;但是这样写就对了哦,为啥没强转就可以点出price
解决方案二:
class ProductFather
{
public string Id
{
set;
get;
}
public string Name
{
set;
get;
}
public double Price
{
set;
get;
}
public ProductFather(string id,double price,string name) {
this.Id = id;
this.Name = name;
this.Price = price;
}
}
解决方案三:
不用强转,子类会继承父类的Price属性,自然能点出来。money += item.Price这里item不用强转,就是子类,
你可以输出item的类型看看 Console.WriteLine(item.GetType());
解决方案四:
因为父类里也有price属性,所以可以打出来 这是编译时
在运行时,会自动判断传进来的真实类型,然后调用子类的price属性
时间: 2024-10-03 23:02:16