c#-C#子类对象存放在父类数组里面,提出时要不要先转成子类型

问题描述

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

c#-C#子类对象存放在父类数组里面,提出时要不要先转成子类型的相关文章

c++-C++ 父类变量保存子类对象 怎样访问子类对象的属性

问题描述 C++ 父类变量保存子类对象 怎样访问子类对象的属性 class Command { public: int id; int type; } class OnCommand : Command { public: int OnCount; } 先申明了一个父类的变量 Command cmd; 经过一些处理后 cmd被赋值了一个OnCommand对象 请问如何将cmd转换为OnCommand然后获取里边OnCount属性的值? 不允许这样获取么? 解决方案 你所用的是继承,而不是内嵌对象

初学者对于java继承、多态,子类对象的内存分配的一些问题,百度了好多,但感觉没有系统的,在此提问,希望前辈们传到授业解惑

问题描述 由于是初学者,所以有些表述可能有误,都只是自己的一些理解.我是纯初学者,看过两个星期的C++,之前也学过C.感觉看C++的时候,更容易去理解C++中的面向对象技术的实现,但看JAVA的时候,可能隔着一层虚拟机,有些实现很难理解.第一个问题:我了解到一个对象里面,隐含了一个引用this,可以用this来特别地引用本对象的成员或者函数,然后还有一个super关键字,书上说这个关键字不是一个引用,但怎么看都感觉这个super是一个指向本对象的父类类型的引用.我想问这个super到底是什么,如

hibernate保存子类对象

问题描述 hibernate保存子类对象 将子类对象强制转换为父类属性,保存这个对象时,调用的是父类的hibernate配置文件还是子类的配置文件

为什么子类能够间接调用父类的私有方法

问题描述 子类的对象是不能直接调用父类的私有方法,但是却可以间接调用,求大家解答!代码如下classFather{publicFather(){System.out.println("Father");}privatevoidhello(){System.out.println("hello");}publicvoidsayHello(){System.out.println(thisinstanceofSon);this.hello();}}publicclass

java+ 程序 子类继承父类 创建子类对象时构造方法中无显示调用父类构造方法

问题描述 java+ 程序 子类继承父类 创建子类对象时构造方法中无显示调用父类构造方法 创建子类对象时,Student s = new Student(""school""); 该构造方法中没有显示调用父类的构造方法,但还是编译成功了,该构造方法调用自身的构造函数,此构造函数中有调用父类的构造方法,执行成功的原因是什么 解决方案 不用显示调用,会自动执行父类的构造 解决方案二: 子类的构造方法中,如果没有显示调用父类的构造方法,会默认调用父类无参的构造方法.类似于

创建子类对象的时候,是否会调用父类构造方法?顺序如何?

问题描述 创建子类对象的时候,是否会调用父类构造方法?顺序如何?

一个判断题 ,父类对象到底能不能强制转换为子类对象

问题描述 父类对象到底能不能强制转换为子类对象请给个明确的回答,到底是能还是不能! 解决方案 解决方案二:应该不行吧,做个试验不就得了吗?解决方案三:BextendsA;CextendsA;Aa1=newA();Bb1=(B)a1;//classcastexceptionAa2=newC();Bb2=(B)a2;//classcastexceptionAa3=newB();Bb3=(B)a3;//OK解决方案四:[Quote=引用2楼haydenwang8287的回复:]Aa3=newB();B

成员变量-父类对象引用子类对象

问题描述 父类对象引用子类对象 父类引用子类对象: Foo(){ int a=3; } Goo extends Foo(){ int a=4; } Foo f=new Goo(); f.a; 结果a=3. 不是说父类引用的是子类的对象,而子类重写了父类的成员变量.f.a应该=4.? 这是为什么呢? 解决方案 Foo(){ protected int a=3; } Goo extends Foo(){ a=4; } Foo f=new Goo(); f.a 这样写才是4 解决方案二: 因为你在派生

强制转换和父类引用指向子类对象的区别

问题描述 classFather{privateinti=0;publicvoidf(){System.out.println("Father()");}}classSonextendsFather{publicvoidf(){System.out.println("Son()");}}publicclassNullAbstract{publicstaticvoidmain(String[]args){Sons=newSon();((Father)s).f();//