本篇体验引用类型转换:子类转换成父类,父类转换成子类,以及不是子父级关系类之间的转换。
□ 隐式转换:子类转换成父类
public class Animal{public int _age;public Animal(int age){this._age = age;}}public class Dog : Animal{public float _weight;public Dog(float weight, int age) : base(age){_weight = weight;}}
客户端,子类转换成父类。
static void Main(string[] args){Dog dog = new Dog(2.5f,12);Animal animal = dog;Console.WriteLine(animal._age);}
结果:12
可见,子类转换成了父类是隐式转换。这种转换在栈上完成,栈上先有代表子类的变量dog,然后有代表父类的变量animal,最后把dog保存的堆地址赋值给了anmial。
□ 强转:父类转换成子类
如果客户端父类转换成子类。
static void Main(string[] args){Animal animal = new Animal(12);Dog dog = (Dog)animal;Dog dog = animal as Dog;if (dog != null){Console.WriteLine(dog._age);}else{Console.WriteLine("转换失败");}}
结果:抛出异常,Animal无法转换成Dog
可见,使用以上方式把父类强转成子类,转换失败会抛出异常。
新闻热点
疑难解答