MVA 課程 Programming in C# Jump Start 中的範例,用自己的想法改寫並紀錄,下面範例兩大重點
- 物件導向繼承概念
- 利用 as 和 強制轉換(鑄型)的差異
namespace OOP_Inherit
{
class Program
{
static void Main(string[] args)
{
var animal = new Animal();
var snoopy = new Snoopy();
// 傳入 snoopy 參數來說明繼承概念,會印出
// OOP Inhert Sample
// Snoopy 的主人是 Charlie Brown,他有 2 隻腳
OOP_Inhert_Sample(snoopy);
Console.WriteLine("==========================");
// 傳入 animal 參數來說明轉型,會印出
// OOP Inhert Sample
// dog 是 null
// 無法將類型 "Animal" 的物件轉換為類別 "Snoopy"
OOP_Inhert_Sample(animal);
}
// 傳入參數為 Animal class,Dog 和 Spoony 因為繼層關係也是 Animal Class
public static void OOP_Inhert_Sample(Animal a)
{
a.Name = "OOP Inhert Sample";
Console.WriteLine(a.Name);
// 判斷參數 a 是不是 Snoopy class
if (a is Snoopy)
{
// 利用 as 把參數 a 轉型為 Snoopy class,
// 轉型失敗會回傳 null,轉型成功,Snoopy Class 會有 Master Property
var snoopy = a as Snoopy;
if (snoopy != null)
{
// Snoopy class 因為繼承 Dog Class 所以也有 Legs Property
snoopy.Legs = 2;
snoopy.Master = "Charlie Brown";
Console.WriteLine(string.Format("Snoopy 的主人是 {0},他有 {1} 隻腳", snoopy.Master, snoopy.Legs));
}
}
// 下面是比較利用 as 和 鑄型來轉換 class 使用上的差異:
// 1. 利用 "as" 把參數 a 轉型為 Dog class,轉型失敗會回傳 null
// 2. 利用 "鑄型" 把參數 a 轉型為 Snoopy class,轉型失敗的話,會傳出 exception
var dog = a as Dog;
if(dog == null) Console.WriteLine("dog 是 null");
try
{
var Error = (Snoopy)a;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public class Animal { public string Name { get; set; } };
public class Dog : Animal { public int Legs { get; set; } };
public class Snoopy : Dog { public string Master { get; set; } };
}
}
沒有留言:
張貼留言