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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于子类对象的构造函数和父类构造函数的执行顺序
我们分别为父类和子类添加显式的构造函数,代码如下 01 class Person 02     { 03         private int nAge; 04         protected
父类类型的引用指向子类的对象
对于多态,可以总结以下几点: 一、使用父类类型的引用指向子类的对象;  二、该引用只能调用父类中定义的方法和变量;  三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)  四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。
C#父类强制转换成子类,子类隐式转换成父类
看你将父类引用到的是父类对象还是子类对象了. 比如Person类是Student的父类 那么可以将p直接强制转换为Student: Person p=new Student(); Student s=(Student)p;//正确    如果你创建实例的时候没有将父类引用到子类对象,是无法转换的: Person p=new Person(); Student s=(Student
父类对象到底能不能强制转换为子类对象
首先是可以的。前提是:此父类对象为子类对象强转的结果 例如:   Father father = (Father)son; 当这种情况时,可以用instanceof判断是否是子类类型(实际) 然后强转回去   if(father instanceof Son)      Son son =(Son)father; 除此之外,不行。 往深了讲。子类强制转换为父类对象时,并没有实际丢失它原
java类继承总结一 父类类型与子类类型之间的转化问题
java类继承总结一 父类类型与子类类型之间的转化问题 本文将通过一个实例描述父类类型与子类类型之间的转化问题,这个很特殊的问题常常会导致一些潜在的危险,让你整整一个晚上都在调试程序以解决一个让人抓狂的java.lang.ArrayStoreException异常。1. 子类数组的引用可以装换为超类数组的引用 2. 子类的引用child可以转换为父类的引用parent(这里假设pare
C#父类引用指向子类对象
父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog。其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类。 Animal animal = new Cat(); 即声明的是父类,实际指向的是子类的一个对象。 那这么使用的优点是什么,为什么要这么用?可以用这几个关键词来概括:多态、动态链接,向上转型 也有人说这是
C# 里氏转换(父类转换成子类)( is as )
里氏转换: 1、子类可以赋值给父类 2、如果父类中装的是子类对象,则可以将这个父类转换为对应的子类对象 ---->关键字 1、is:返回bool类型,指示是否可以做这个转换 2、as:如果转换成功,则返回对象,否则返回null using System; using System.Collections.Generic; using System.Linq; using Sys
构建子类,初始化父类(执行顺序n
总结起来很简单,咱们先看一下案例: 父类 Base1::Base1():b(0){cout"调用了Base的默认构造函数"endl;} Base1::Base1(int b):b(b){cout"调用了带参数的Base的构造函数"endl;} Base1::~Base1(){cout"调用了Base的析构函数"endl;} 子类 Derived1::Derived1():d(0),Ba
就先有父类先有子类(个人理解)
由于昨天上课讲到先有父类,还是先有子类时候,有点迷,教员老师说先有子类再有父类。但是自我感觉不太符合逻辑,老师意思是父类是众多子类抽取共性造出来的,具有便于维护,安全,更好的延伸性的特点。 但是我觉得在逻辑上是先有爹,再有儿子,而不能说大儿子,二儿子都像爹,就说先有儿子,再有爹,举例说虽然我们是某某的同学,所以先认识某某,然后某一天去其家玩,认识了其父亲,就说你啥时候生的你爹啊,和你这么像,你这
java之 多态-扩展性、多态子父类的类型转换、equals方法
多态:可以理解为事物存在的多种体现形态。 人:男人,女人 动物:猫,狗。 猫 x = new 猫(); 动物 x = new 猫(); 1,多态的体现 父类的引用指向了自己的子类对象。 父类的引用也可以接收自己的子类对象。 2,多态的前提 必须是类与类之间有关系。要么继承,要么实现。 通常还有一个前提:存在覆盖。 3,多态的好处 多态的出现大大的提高程序的扩