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属性