在 C# 當中,一般在宣告變數時,都要指定型別,例如基本的 int
或是類別名稱 (如 StringBuilder
),可是 var
和 dynamic
能夠在宣告時不指定型別,一起來看看以下的範例。(本篇改寫自個人的鐵人賽文章:Day 5: C# 關鍵字: var 和 dynamic - iT 邦幫忙)
var 的說明與範例
Dictionary<int, string> books = new Dictionary<int, string>();
books.Add(1,"C# Tutorial");
books.Add(2,"Python 1-2-3");
books.Add(3,"The Basic of C++");
foreach(var pair in books){
// foreach(KeyValuePair<int, string> pair in books){ // 效果與 var 相同
Console.WriteLine("索引: " + pair.Key + ", 書名: " + pair.Value);
}
var query = from book in books
where book.Value.Contains("C#")
select book.Value;
Console.WriteLine("查詢結果: " + string.Join(", ", query));
var
可以省略掉長長的類別名稱,使程式碼更簡潔;另外也可以方便的接收 LINQ 的執行結果,使開發更加的便利且具備彈性。
dyanmic 的說明與範例
public class Computer{
public void TurnOn(){
Console.WriteLine("電腦運行中 ...");
}
}
public class Tablet{
public void TurnOn(){
Console.WriteLine("平板電腦已啟動");
}
}
public static void Main()
{
dynamic pc1 = new Computer();
pc1.TurnOn();
dynamic tab1 = new Tablet();
tab1.TurnOn();
}
dynamic
是執行時才知道變數的類型,因此不同類別的物件有相同的方法、屬性時,可以用相同名字呼叫或使用,缺點則是沒辦法在編譯前先知道型別的錯誤。時常被用在動態載入的類別上。
var 和 dynamic 的差別
var
是編譯時會帶入型態 (如 string
),實際上執行時和直接指定型別是相同的;而 dynamic
是執行時被指定數值後才決定其型態。