static void Main(string[] args) { Animal animal = new Animal(); Dog dog = new Dog(); Poodle poodle = new Poodle(); TakeAnimal(dog); }
// 可傳入Animal類別以及其衍生類別,且會自動轉型為Animal private static void TakeAnimal2(Animal animal) { // 雖然參數的型別是Animal,但是呼叫端的傳入型別是Dog // 又因為Dog繼承自Animal,所以可以在這裡將Animal轉型為Dog // 轉型方法一 // 若轉型失敗會丟出Exception Dog dog1 = (Dog)animal; // 轉型方法二-(建議) // 若轉型失敗dog2 會為 null,不會有Exception Dog dog2 = animal as Dog; /*--------------------------------------------------*/ // 傳入的型別為Dog,又因為型別只能往上轉,不能往下轉的特性, // 所以在這邊沒辦法轉型為poodle // 會丟出Exception Poodle poodle = (Poodle)animal; }