位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# 類型推理

提問人:劉團圓發(fā)布時間:2020-12-08

    c#是一種強類型化的語言,這表示每個變量都有固定的類型,只能用于接受該類型的代碼中。在前面的所有代碼示例中,都采用如下兩種形式的代碼來聲明變量:

    <type> <varName>;

    <type> <varName> = <value>?

下面的代碼顯不了變量<varNcrme>的類型:

    int mylnt = 5;

    WriteLine(mylnt);

將鼠標指針停放在變量標識符上,IDE就會顯示該變量的類型,如圖下所示。

    int mylnt = 5;

    WriteLine(nylnt);

            ? (local variable) int mylnt

C# 3引入了新關鍵字van它可以替代前面代碼中的type:

    var <varWa/ne> = <value>;

在這行代碼中,變量隱式地類型化為<varName>的類型。注意,類型的名稱并不是var。在下面的代碼中:

    var myVar = 5;

myVar是int類型的變量,而不是var類型的變量,如下所示,IDE也顯示了其類型。

    var *ylnt =5;

    WriteLine(mylnt);

            ?(local variable) int mylnt

    這是非常重要的一點。使用var時,并不是聲明了一個沒有類型的變量,也不是聲明了一個類型可變的變量。否則,C#就不再是強類型化的語言了。實際上,我們所做的只是依賴于編譯器來確定變量的類型。

    如果編譯器不能確定用var聲明的變量類型,代碼就無法編譯。因此,在用var聲明變量時,必須同時初始化該變量,因為如果沒有初始值,編譯器就無法確定變量的類型。因此,下面的代碼就無法編譯:

    var myVar;

var關鍵字還可以通過數(shù)組初始化器來推斷數(shù)組的類型:

    var myArray = new[] { 4, 5, 2 );


在這行代碼中,myArray類型被隱式地設置為int[]。在采用這種方式隱式指定數(shù)組的類型時,初始化器中使用的數(shù)組元素必須是以下情形中的一種:

    ?相同的類型

    ?相同的引用類型或null

    ?所有元素的類型都可以隱式地轉換為一個類型

    如果應用最后一條規(guī)則,元素可以轉換的類型就稱為數(shù)組元素的最佳類型。如果這個最佳類型有任何含糊之處,即所有元素的類型都可以隱式轉換為兩種或更多的類型,代碼就不會編譯。我們會接收到錯誤,錯誤中指出沒有最佳類型,如下所示:

    var myArray = new[] { 4, "not an int", 2 };

還要注意數(shù)字值從來都不會解釋為可空類型,所以下面的代碼無法編譯:

    var myArray = new[] { 4, null, 2 };

但可以使用標準的數(shù)組初始化器,使如下代碼可編譯:

    var myArray = new int?[] { 4, null, 2 };

    最后一點要說明的是,標識符var并非不能用于類名。這意味著,如果代碼在其作用域中(在同一個名稱空間或引用的名稱空間中)有一個var類,就不能使用var關鍵字的隱式類型化功能。

    類型推理功能本身并不是很有效,因為在本節(jié)前面的代碼中,它只會使事情更復雜。使用var會加大判斷給定變量的類型的難度。推斷類型的概念非常重要,因為它是其他技術的基礎。

繼續(xù)查找其他問題的答案?

相關視頻回答
回復(0)
返回頂部