程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#特征 匿名類型與隱式類型部分變量應用引見

C#特征 匿名類型與隱式類型部分變量應用引見

編輯:C#入門知識

C#特征 匿名類型與隱式類型部分變量應用引見。本站提示廣大學習愛好者:(C#特征 匿名類型與隱式類型部分變量應用引見)文章只能為提供參考,不一定能成為您想要的結果。以下是C#特征 匿名類型與隱式類型部分變量應用引見正文


在本篇中我要引見兩個概念,我認為這兩個器械必需一路來引見,如許能力連接。
C# 2.0裡我們曾經匿名辦法了,如今類型也玩起匿名來了,怪不得年夜家“告發”的時刻都愛好匿名,為啥?由於匿名被告發人就找不著報復對象了呗,是的,匿名就是把名字隱蔽起來,沒著名字誰還能找獲得你啊。

匿名類型


在C#裡有如許一些類型,它是作為暫時貯存數據的,性命周期只在這個辦法內,辦法停止了,這個類型的性命周期也沒有了。那末這裡我們便可以應用一個匿名類型。


var KeyPair = new {Key=”yuyi”,Value=”20”};

這個KeyPair就是一個匿名類型,留意KeyPair這裡是一個變量名,其實不是類的名字。嗯,後面還有一個var,這又是甚麼呢?這是C# 3.0外面的隱式部分變量。


隱式類型部分變量

照樣先引見一下隱式類型部分變量吧:
在C# 3.0裡多了一個症結字var,他表現如許的一品種型:C#編譯器可以依據高低文揣摸的出來
好比var I = 5;編譯器可以依據前面的賦值揣摸的出來i應當是個整型。既然是部分變量,那末它就只能用在辦法外部了,留意C#是強類型的,引入了一個var其實不是像javascript那樣,釀成了一個弱類型的說話。在編譯器第一次編譯後var就會被肯定的類型所替換的。所以關於隱式類型部分變量要留意以下幾點:

1.它只能存在於辦法外部
2.它不是一個新的類型,只是一個症結字,或許叫做一個占位符,在C#編譯器編譯後它就會被肯定的類型所替換
3.它是編譯器依據高低文揣摸出來的,所以一切一切不克不及被編譯器揣摸出來的用法都是毛病的。好比不克不及如許應用:var nullValue = null;由於null啥也不是,他是一個空指針,是一個不肯定的器械。也不克不及如許應用:var I = 5;I = “abc”;編譯器依據第一個賦值會揣摸出它是一個整型,然則隨後又將一個字符串賦值給它,這是怎樣回事呢?

關於var我的建議是不到必不得以的時刻不消,那甚麼是必不得以呢?來看我們的匿名類型吧。

回到匿名類型

適才說了,匿名類型是沒著名字的類型,沒著名字你怎樣來稱謂它,怎樣來聲明它?然則匿名類型真的是沒著名字的麼?
看看C#編譯器又在我們面前干了些甚麼:
應用ILDASM翻開編譯過的法式集,發明多了一個類型:


<>f__AnonymousType0<<Key>j__TPar, <Value>j__TPar>

這個類型是直接繼續自System.Object的,而且是internal seald(只在法式集內可見,而且不克不及被繼續)。有心的你或許會發明,這個類型照樣一個泛型類型,那末只需我們在應用一個匿名類型的時刻參數個數,參數稱號不產生變更,編譯器是不會為我們發生更多的類型的:


var KeyPair1 = new { Key="yuyi",Value="Programer"};
var KeyPair2 = new { Key="y",Value=3};
var KeyPair3 = new { Key=4,Value="abc"};

下面三個匿名類型,編譯器只會為我們在面前發生一個新類型,一個泛型的新類型。假如我們將這個匿名類型內的屬性名修正一下:對


var KeyPair1 = new { Key="yuyi",Value="Programer"};
var KeyPair2 = new { Key="y",Value1=3};

就會發生兩個新泛型了:


<>f__AnonymousType0<<Key>j__TPar, <Value>j__TPar>
<>f__AnonymousType1<<Key>j__TPar, <Value1>j__TPar>

看看,這個定名照樣有紀律可循哦。
假如你給這個匿名類型添加一個新屬性呢?
如許又發生了一個新類型了:


<>f__AnonymousType1<<Key>j__TPar, <Value1>j__TPar, <Test>j__TPar>

嗯,這個成績照樣值得存眷的,所以我們在應用匿名類型的時刻應當盡可能堅持“分歧性”:
屬性個數分歧(這個盡可能了)。
屬性稱號分歧,這個比擬好掌握。
只需堅持了這個分歧性,編譯器會為分歧的發生統一個類型,而紛歧致的會新發生一個類型,假如紛歧致的太多我想是否是會發生“代碼爆炸”而導致”WorkSet”過年夜形成機能的喪失?這個只是我小我以為,沒有經由測試。

持續隱式類型部分變量

因為匿名類型在我們編寫代碼的時刻其實不存在,所以匿名類型也不克不及作為辦法的前往值和參數了。”var”一樣,也是只能在辦法外部應用。如今是否是有點明確甚麼時刻才是必不得以應用”var”啊?就是在應用匿名類型的時刻,匿名類型編譯器可以揣摸出來,然則靠人工又沒法揣摸了。所以我認為只在編譯器可揣摸而人弗成揣摸的時刻才應用隱式類型部分變量,靠我們人工可以揣摸的照樣不建議應用,顯式的聲明變量類型可以加強代碼的可讀性,這是一個好的編程習氣,不要由於C# 3.0供給了如許的特征就年夜用而特用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved