跨越程式語言界限(二)

2021-08-07 03:23:27 字數 1350 閱讀 3476

從 visual c# 3.0 開始,在方法範圍內宣告的變數型別可以具有隱式「型別」var。 隱式型別本地變數為強型別,就像使用者已經自行宣告該型別,但編譯器會根據上下文來判斷你到底是想用什麼型別的。 i 的以下兩個宣告在功能上是等效的:

var i = 10; // implicitly typed  

int i = 10; //explicitly typed 

var可以理解為匿名型別,我們可以認為它是乙個宣告變數的佔位符。它主要用於在宣告變數時,無法確定資料型別時使用。

var 關鍵字指示編譯器通過初始化語句右側的表示式推斷變數的型別。 推斷型別可以是內建型別、匿名型別、使用者定義型別或 .net framework 類庫中定義的型別。

問題:什麼時候能使用var?什麼時候不能使用var?

1、僅當區域性變數在相同語句中進行宣告和初始化時,才能使用 var;變數不能初始化為 null,也不能初始化為方法組或匿名函式。

2、var 不能在類範圍內對字段使用。

3、使用 var 宣告的變數不能在初始化表示式中使用。 換句話說,此表示式是合法的: int i = (i = 20);,但是此表示式會生成編譯時錯誤:var i = (i = 20);

4、不能在相同語句中初始化多個隱式型別化變數。

5、如果一種名為 var 的型別處於範圍內,則 var 關鍵字會解析為該型別名稱,不會被視為隱式型別化區域性變數宣告的一部分。

c# 4.0新增了乙個型別dynamic關鍵字,宣告為dynamic的型別會在執行時嘗試呼叫方法,這些方法的存在與否不是在編譯時檢查的,而是在執行時查詢,如果方法存在並且引數正確,會正常呼叫,否則會丟擲microsoft.csharp.runtimebinder.runtimebinderexception異常。

下面這段程式在.net 3版本是無法執行的,但.net 4可以執行

static void main(string args) 

,t's value = ", t.abc, t.value); 

console.readline(); 

} var和dynamic的本質區別是型別判斷的時間不同,前者是編譯時,後者是執行時。

1.var在宣告變數方面簡化語法(只能是區域性變數),在編譯時交給編譯器推斷。

2.dynamic也是為簡化語法而生的,它的型別推斷是交給系統來執行的(執行時推斷型別)。

3.var不能用於字段、引數等,而dynamic則可以。

4.var在初始化的時候就確定了型別。

5.dynamic可以用於方法字段、引數、返回值以及泛型引數,把動態發揮的淋漓盡致。

6.dynamic在反射方面做的可以,只是我自己沒有嘗試過。

7.var是c# 3.0的產物,dynamic是c# 4.0的產物。

C語言程式設計二

include include 統計給定的n個數中,負數 零和正數的個數。int main1 else if x 0 else printf d d d n fu,zero,zheng return 0 數列的定義如下 數列的第一項為n,以後各項為前一項的平方根,求數列的前m項的和。int main...

Go語言併發程式設計(二)

使用非常簡單,在函式前增加乙個go 例 go f a,b 開啟後,不等待其結束,主線程繼續執行。ps 要注意的是乙個goroutine開啟後,若不等其執行,main 主goroutine 中將繼續執行下一步,那麼主線程一結束,goroutine中的程式就不會執行了。如何解決?如下 func says...

c語言程式設計入門(二)

include int main 對於這個程式,可能需要先講一下printf這個函式的使用 printf函式是乙個標準庫函式,它的函式原型在標頭檔案 stdio.h 中。但作為乙個特例,不要求在使用 printf 函式之前必須包含stdio.h檔案。printf函式呼叫的一般形式為 printf 格...