iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 16
0
自我挑戰組

.net 後端起手式 30天認識 C# 系列 第 16

DAY 16 類別(五)

  • 分享至 

  • xImage
  •  

類別

沒錯,又是類別,今天要來講隱含型別與匿名類別。

var

隱含型別區域變數如同您自己宣告的類型一樣是強型別,但是編譯器會判斷類型。

至從會 var 後,我在宣告類型時就只用它了呢。

簡單說就是它會自動判斷類別,無論是簡單類別、陣列又或者自定義類別等等的。因為是在編譯時期就決定好了,所以是強型別的變數,不會在執行時期發生型別相關問題,與之相反的是 dynamic,這是在執行時期才會決定型別,所以初學者在撰寫時容易發生不預期的錯誤。

int number = 0;
var numberv = 0;
string str = "Mio";
var strv = "Mio";
int[] arr = new int[3]{ 1, 2, 3 };
var arrv = new int[3]{ 1, 2, 3 };
Coordinate c1 = new Coordinate (12.156m, 7.195m);
var cv = new Coordinate (12.156m, 7.195m);

可以看到 var 可以取代所有的類別名稱,超級好用,但為了讓初學者一開始先打好底,所以起初沒有去說明。有些很方便的東西,如果沒有基礎知識的話,很容易看不懂在寫啥毀,為什麼可以這樣寫等等。

匿名類型

匿名類型提供一個便利的方法,將一組唯讀屬性封裝成一個物件,而不需要事先明確定義類型。

有了 var 我們才可以使用匿名類型,不然在明確定義類型前,沒有人知道是什麼類型。

var member = new { ID = 0, Name = "Mio" };
Console.WriteLine (member);

可以看到印出來的東西跟昨天講的完全不一樣,因為匿名類型沒有類型名稱,所以編譯器會重寫 ToString() 方法,變成傳回 PropertyName = value 這樣的對照表。

若是多筆資料的話

var members = new [] { new { ID = 0, Name = "Mio" }, new { ID = 1, Name = "Miffy" } };
foreach (var member in members) {
  Console.WriteLine (member);
}

foreach 的變數也可以用 var 取代,但方法那種需要判斷型別的地方就不行,還有就是 array 裡面的所有類別都必須相同,否則會錯誤。

若是有 array 成員的話

var member = new { ID = 0, Names = new string[] { "Mio", "Miffy" } };
foreach (var name in member.Names) {
  Console.WriteLine ($"ID = {member.ID}, Name = {name}");
}

一些小結論

var 有多好用我不用再說了,現在就可以把之前練習的程式碼全改成 var 了,但如果程式碼有出錯,我會建議你先把 var 改回成明確類型,會比較好偵錯。

匿名類型基本上目前都還用不到,介紹後面的內容才會出現,現在先看過有個印象就好。

感謝閱讀。

參考連結
var (C# 參考) | Microsoft Docs
匿名類型 (C# 程式設計手冊) | Microsoft Docs


上一篇
DAY 15 類別(四)
下一篇
DAY 17 委派
系列文
.net 後端起手式 30天認識 C# 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言