2011-06-15 99 views
31

如何在C#中創建像int,bool等非空值類型?在C#中創建非空值類型#

+1

在什麼情況下你會使用這樣的事情?我的意思是,你想完成什麼?使用C#中的類創建對象時,可以始終檢查null。你使用術語「類型」很奇怪。如果您在問題中添加了一些上下文,則可以更輕鬆地找出解決方案。 – stephenbayer 2011-06-15 23:12:11

+0

如果賦值運算符是可重載的,AFAIK不可爲空的引用類型將是可能的。但是,這在C#中並非如此。另一個catch是'MyType類型;'在開始時爲空。 – 2011-06-15 23:27:00

+2

@stephenbayer:空值是*不好*。運行類型的空檢查從根本上與運行類型檢查沒有區別。如果我給你一個字符串,並且你調用它的方法,你將不會知道它是否是空的,直到它在運行時崩潰。一些語言具有不可空的引用類型;如果你想表示一個空值,你可以使用不同的數據類型(相當於'在許多語言中找到的選項'),所以你在編譯時通過類型系統進行通信並強制進行空值檢查。請參閱http://stackoverflow.com/questions/641328/about-the-non-nullable-types-debate/1451909#1451909。 – Juliet 2011-06-15 23:33:59

回答

42

是的,這些被稱爲struct

結構是值類型,就像int,bool等。

他們有與之相關的一些規則/建議:(我認爲這是最重要的)

  • 一個結構傳遞和價值分配,不使用ref或out關鍵字時,.. 。這意味着將所有放入結構中的內容都將在分配或傳遞給方法時被複制。這就是爲什麼你不應該製造大型結構。

  • 你不能定義參數的構造函數在C#中的結構

  • 結構是更好的爲不可變的,並且沒有屬性setter。你可以通過製作可變結構來解決真正的麻煩。

有關結構的Microsoft文檔中可以找到其他規則。

至於不可空參考類型 ...這是不可能。您必須手動檢查代碼中的空值。

10

可以定義struct

結構類型是通常用於封裝相關變量的小基團,如一個矩形的座標或項的一個特性的值類型庫存。下面的例子顯示了一個簡單的結構聲明:

public struct Book 
{ 
    public decimal price; 
    public string title; 
    public string author; 
} 

但是,你不能定義別名像intSystem.Int32和需要用全名MyNamespace.Book(或Bookusing MyNamespace;)到你的結構參考。

相關問題