iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 25
0

Type

簡單說就是一個可以獲得類型相關資訊的類型。例如類型名稱、所屬的命名空間等的資訊外,也包含該類型是否公開、是否私人等等修飾內容,以及該類別是否為類別類型、介面類型、陣列類型等等,最後當然也可以存取該類型的成員內容。

建立類型

可以透過兩種方式產生 Type 類型。

GetType

因為 Object 包含 GetType 方法,所以所有類型都包含這個方法。

typeof

透過 typeof 關鍵字來取得 Type 類型。

var stringType = "Mio".GetType ();
var stringType2 = typeof (string);
var isEquals = stringType == stringType2;

可以看到兩個是一樣的型別 System.String

基本資訊

這邊簡單的舉例類型的名稱、類型的存取範圍,基底類型是什麼。

var stringType = "Mio".GetType ();
Console.WriteLine ($"Name = {stringType.Name}, IsPublic = {stringType.IsPublic}, BaseType = {stringType.BaseType}");

還有很多很多內容,就請自己點點看。

類型成員

static void Main (string[] args) {
  var memberType = typeof (Member);
  var memberMembers = memberType.GetMembers ();
  var memberPropertys = memberType.GetProperties ();
  var memberMethods = memberType.GetMethods ();
}
class Member {
  public int ID { get; set; }
  public string Name { get; set; }
  public string Phone;
  public void Print () { }
}

透過上述的三種方法可以存取成員、屬性以及方法,這邊有地方我不是很清楚,可能不小心誤導到其他人了,GetProperties 是傳回目前 Type 的所有公用屬性,而我在 DAY 21 的時候提到了 get & set 存取子時,說到若不添加存取子,則視為 get & set,但經由這次範例發現並不是這樣,沒有撰寫存取子的 Phone 並不屬於公用屬性,我很抱歉我觀念錯了,如果有大大能為我解答,還請麻煩了。

一些小結論

Type 類型可以幫助我們檢查類型,獲得類型的相關資訊等,但我覺得最常使用的地方是比較類型,與可以在編譯時期動態操作類型,後者會在明天簡單的提到,也因為本人的工作內容並不需要用到很多的反射操作,所以也只會簡單的使用,只是讓你哪天需要操作類型時,在腦海裡想到有這種類型。

然後其實我們在 DAY 15 的時候,就有使用過此類型來檢查類型是否一樣,但當初沒有想到會來介紹這類型,所以也沒說之後會提或補充。但今天本來想介紹反射,但介紹反射前,我覺得需要先認識 Type,不然反射一堆 Type 的操作卻不先介紹 Type 有點奇怪。

感謝閱讀。

參考連結
Type Class (System) | Microsoft Docs
typeof (C# 參考) | Microsoft Docs


上一篇
DAY 24 DateTime
下一篇
DAY 26 反射
系列文
.net 後端起手式 30天認識 C# 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
米歐
iT邦新手 3 級 ‧ 2019-06-05 15:57:25

對於文中的疑惑,我額外寫了一篇文章C# 類別屬性與欄位,有興趣的人可以延伸閱讀。

我要留言

立即登入留言