2 steve1988717 steve1988717 于 2016.03.08 16:24 提问

C#子类对象存放在父类数组里面,提出时要不要先转成子类型 1C
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

4个回答

steve1988717
steve1988717   2016.03.08 16:25

money += item.Price;但是这样写就对了哦,为啥没强转就可以点出price

steve1988717
steve1988717   2016.03.08 16:25

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;

    }
}
bealing
bealing   Rxr 2016.03.08 17:49

不用强转,子类会继承父类的Price属性,自然能点出来。money += item.Price这里item不用强转,就是子类,
你可以输出item的类型看看 Console.WriteLine(item.GetType());

wangzi_123456
wangzi_123456   2016.03.09 20:26

因为父类里也有price属性,所以可以打出来 这是编译时
在运行时,会自动判断传进来的真实类型,然后调用子类的price属性

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!