C 3 0新特性之隱式型別區域性變數的使用

2021-04-16 00:58:59 字數 1292 閱讀 6026

首先說明一下,此新特性的專題基於ms五月份分布的c#3.0規範,但是官方中文版還沒有出來,結合自己的實踐和理解,希望能和大家一起分享某些前沿的東東,很有可能一些地方會出錯,望拋磚。

在c# 3.0裡面, 可以對區域性變數進行隱式型別宣告, 就是在宣告時可以不指定該變數的型別, 變數在初始化的時候會由編譯器從表示式的上下文中推出真正的型別, 對開發者來說, 無疑是簡化了很多, 主要是通過新的關鍵字var, 有如下面的例子:

var i = 5;

var s = "hello";

var d = 1.0;

var numbers = new int ;

var orders = new dictionary();

其實上面的宣告方法和之前在1.x和2.x中以下的宣告方法是等效的:

int i = 5;

string s = "hello";

double d = 1.0;

int = new int ;

dictionaryorders = new dictionary();

方便是絕對的, 就像我們之前在某些別的高階語中, 早就實現了此功能, 但是對某區域性變數進行隱式型別宣告, 也要遵循一定的條件限制:

- 宣告變數時, 必須對該變數進行初始化.

- 初始化該變數時, 必須使用對應的表示式, 而不能簡單地用乙個物件或是集合本身, 但如果是使用了關鍵字new建立的物件或是集合卻是合法的, 因為那已經是乙個表示式了.

- 變數初始化的表示式在編譯時, 絕對不可以是null型別.

- 如果將要進行隱式型別宣告的區域性變數包含多個宣告, 則要保證每個初始化表示式都有相同的編譯時型別, 保持型別一致, 不能一會是int, 一會又變成了int.

下面我們來看幾個有誤的宣告例子:

例子1:

var x; //宣告變數時沒有初始化

例子2:

var y = ; //集合本身不能作為初始化表示式

例子3:

var z = null; //編譯時型別不允許為null

在現行的orcas編譯環境下, 可以使用var宣告區域性變數, 同時也向後相容, 即原來的方式是可用的. 另外, 根據ms官方的文件說來, var宣告適用於for語句的初始化表示式中, 在using語句中資源獲得時也可用, 舉個例子可以在foreach語句中的迭代變數應用var:

var numbers = int ;

foreach(var n in numbers) console.writeline(n);

不過這樣用的前提要求該集合型別必須可以列舉, var就可以自動被編譯器認作int型別了。 

c 3 0新特性 隱式型別

在c 中,可以用var關鍵字來宣告隱式型別的區域性變數,語法如下 var 變數名 初始值 注意 1.使用var關鍵字定義的變數必須初始化 2.使用var關鍵字只能宣告區域性變數 包括在for foreach using語句中使用的變數 而不能宣告其他變數。3.使用object型別宣告的變數是弱型別,...

C 3 0新特性系列(1) 隱含型別區域性變數

一 隱含型別區域性變數簡介 在c 3.0中增加了很多新的語言特性,如果有乙個區域性變數被宣告為var,這個宣告被視為隱含型別區域性變數宣告,然後由編譯器根據區域性變數初始化表示式來推斷變數的型別。如下面的宣告 varinteger 10 varname terry lee varnumbers ne...

一 初學C 3 0之隱含型別區域性變數

一 初學c 3.0之隱含型別區域性變數 隱含型別區域性變數 implicitly typed local variable 利用var關鍵字宣告區域性變數,變數宣告時必須初始化,變數的型別從初始化的值推斷出來。using system namespace teson 相當於int d new int...