C 匿名型別

2022-04-29 12:51:12 字數 1510 閱讀 3937

一、什麼叫做匿名類?

匿名類就是沒有名字的類。匿名類不能被引用,只能再建立的時候用new語句來宣告。

二、匿名類的優勢以及應用場景;

1、匿名型別提供了一種方便的方法,可以用來將一組唯讀屬性封裝到單個的物件中,而且並不需要首先顯示定義乙個型別。

2、型別名由編譯器生成,並且不能在源**級使用。每個屬性的型別由編譯器推斷。

3、可通過是用new運算子和物件初始值建立匿名型別。

4、匿名型別通常用在查詢表示式的 select 子句中,以便返回原序列中每個物件的屬性子集(linq 中使用的比較多)。

三、匿名類的應用; 

//

匿名型別

var news = new ;

showinfo(news);

//static

void showinfo(t news)

四、var隱式型別;

隱式型別var,宣告變數是無需指定資料型別的,編譯器會根據賦值判斷其型別的一種機制,它的優勢就在於,通過var這個隱式型別,可以提高開發人員的開發效率,很多時候可以不考慮物件的型別。

五、var 的使用規則;

1、var 型別會被編譯器根據初始值的型別推斷出具體的型別;

2、var 型別的區域性變數必須賦予初始值;

3、無法將null賦值給隱式型別的區域性變數;

4、var 型別變數的定義必須是在方法中或者在屬性get、set 訪問器中;

5、var 不能做方法的引數;

6、不能當作返回值型別;

7、語句中只能宣告一次變數,宣告後不能更改型別;

六、匿名方法;

匿名方法是c#2.0引入的乙個新的特性,它允許開發者內聯(inline)宣告自己的函式**而無須使用委託函式(delegate function)。

匿名方法的應用場景: 

1、需要乙個臨時方法,這個方法使用次數極少;

2、這個方法的**很短,甚至可能比方法宣告都短的情況下使用;

七、匿名方法的例項:

/*匿名方法的演化過程*/

mysumhandler m1 = new

mysumhandler(sum);

m1(2,3

);mysumhandler m2 =sum;

m2(3,4

);//

匿名方法,c#2.0

mysumhandler m3 = delegate(int i, int j)+=

",i,j,(i+j));};

m3(5,6

);//

lambda,表示式c#3.0

mysumhandler m4 = (i,j)=>+=

",i,j,(i+j));};

八、func和action的使用:

func和action是.net的內建委託。func要求由返回值。action要求無返回值。

在使用時,func中尖括號中的最後乙個型別就是返回值。

action,t1 至 t16 是引數。

C 匿名型別

c 3.0引入了對匿名型別的支援。它們是由編譯器動態生成的資料型別,而不是通過顯示地類定義來宣告的。下面通過乙個例子介紹匿名型別的使用 示例 將匿名型別的例項賦給隱式型別的區域性變數 執行結果 注意 除非使用lambda表示式和查詢表示式關聯來自不同型別的資料,或者對資料進行水平投射 以減少乙個特定...

c 匿名型別

匿名型別 允許我們建立無名類型別的特性。匿名型別 anonymous type 經常用於linq查詢的結果中。第6章介紹了物件初始化語句,它允許我們在使用物件建立表示式時初始化新類例項的字段和屬性。提醒一下,這種形式的物件建立表示式由三部分組成 new關鍵字 類名或建構函式以及物件初始化語句。物件初...

C 匿名型別

當我們想要在 中建立乙個物件,需要用 new object 來建立,如果這個物件裡面有一些 屬性我們想要在 new 時就初始化,那麼我們會重寫 乙個建構函式。如果不想重寫乙個 建構函式 該如何做?例子如下 自定義乙個類 point.cs class point 如果不想寫上面 帶初始化x,y的建構函...