本篇體驗引用類型轉換:子類轉換成父類,父類轉換成子類,以及不是子父級關系類之間的轉換。
□ 隱式轉換:子類轉換成父類
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
可見,使用以上方式把父類強轉成子類,轉換失敗會拋出異常。
新聞熱點
疑難解答