在C# 3.0中提供一些新的語言特性;其中一種就是隱含類型區域變數。其用法是使用關鍵字var 進行區域變數的宣告,如下所示
var age = 26;
var username = "zhuye";
var username = "zhuye";
使用var關鍵字,是讓編譯器自行判斷其變數之型態;所以在CLR執行時,此變數已被編譯器指定了變數型態。以下的例子之執行結果就可以了解。
var myInt = 0;
var myBool = true;
var myString = "Time, marches on...";
var evenNumbers = new int[] { 2, 4, 6, 8 };
var myMinivans = new List();
var myEmployee = new Employee();
Console.WriteLine("myInt is a:{0}", myInt.GetType().Name);
Console.WriteLine("myBool is a:{0}", myBool.GetType().Name);
Console.WriteLine("myString is a:{0}", myString.GetType().Name);
Console.WriteLine("evenNumbers is a:{0}", evenNumbers.GetType().Name);
Console.WriteLine("myMinivans is a:{0}", myMinivans.GetType().Name);
Console.WriteLine("myEmployee is a:{0}", myEmployee.GetType().Name);
Console.WriteLine("myEmployee is a:{0}", myEmployee.GetType().Name);

var關鍵字能夠用在以下狀況:
- 區域變數。隱含類型可以使用在任何的基本類型型態。包含arrays、generics、及自訂的類別型態 。
- for 迴圈陳述式。ex: for(var x = 1; x <>
- foreach 迴圈陳述式。ex: foreach(var item in list){...}
- using 陳述式。ex: using (var file = new StreamReader("C:\\myfile.txt")) {...}
var關鍵字使用上的限制:
- var關鍵字不可以使用在類別的欄位及方法之回傳值或參數上。所以以下程式碼的宣告在編譯期間就會發生錯誤:
// 編譯錯誤!var關鍵字不能被使用在宣告類別資料
private var myInt = 10;
// 編譯錯誤!var關鍵字不能被使用在方法之回傳值或是方法的參數
public var MyMethod(var x, var y){} - 宣告隱含類型變數時,必須同時指定變數值,且不可以指定初始值為null;但是可以在指定初始值後將物件值設定為null。
// 編譯錯誤!利用var關鍵字宣告之變數必須指定變數值
var myData;
// 編譯錯誤!利用var關鍵字宣告之變數必須於宣告時同時指定變數值
var myInt;
myInt = 0;
// 編譯錯誤!利用var關鍵字宣告之變數不可指定為null
var myObj = null;
// OK!
var myCar = new SportsCar();
myCar = null;
隱含類型變數也可以宣告成陣列型態。但是要注意的部份是變數陣列在宣告時,陣列值必須同時被初始化,且陣列內成員的型態中不可以混合。
var a = new[] { 1, 2, 3, 4000 }; // 變數a 被視為一個整數型別陣列(int[])
var b = new[] { 1, 1.5, 2, 2.5 }; // 變數b 被視為一個雙精準度型別陣列(double[])
var c = new[] { "we", null, "are", null, "family" }; // 變數c 被視為一個字串型別陣列(string[])
var myCars = new[] { new SportsCar(), new SportsCar()}; // 變數myCars 被視為一個SportsCar型別陣列
var d = new[] { 1, "one", 2, "two" }; // 編譯錯誤!利用var關鍵字宣告的陣列成員,其值不可以有混合型態
沒有留言:
張貼留言