2012-06-19 171 views
4

如何在c#中創建新類型?例如字節有範圍0到255,但我需要新類型,將有0到10範圍。如何聲明新類型

+1

你通常如何創建一個新類型? public class blah ....創建一個新類型來做這件事似乎很沒有意義...... –

+0

你確定你需要一個新類型,而不是僅僅是輸入驗證嗎? –

+0

如何在編譯時設置範圍驗證和類型驗證?例如我不能爲字節類型設置字符串,我得到編譯錯誤。如何爲我的類型做同樣的事情? – Tomas

回答

4

令人驚訝的是,人們想要關閉這不是一個真正的問題!

答案是C#沒有支持在編譯時檢查整數範圍的類型系統,除了一些內置的情況:它會阻止您將較大範圍的數字分配給較小範圍的數字。但是這些數字的範圍是在語言規範中預先定義的。

+4

我同意你的意見。沒有人理解我問,甚至沒有回答這個問題,就沒有人給出正確答案和結束問題。 – Tomas

0

您創建了一個包裝類byte(或int,如果您需要更大的範圍)。
然後,您定義通常的操作 - *,/, - ...您可以使用運算符重載。
您可以添加一些檢查來查看值是否仍然在邊界內,否則拋出相應的異常。
這裏有一個簡單的例子:

class LimitedRangeValue 
{ 
    private static readonly int maxval = 10; 
    private static readonly int minval = 0; 
    private int n; 

    public LimitedRangeValue(int n) 
    { 
     if (n < minval || n > maxval) 
      throw new OverflowException(); 
     this.n = n; 
    } 

    public static LimitedRangeValue operator +(LimitedRangeValue r1, LimitedRangeValue r2) 
    { 
     return new LimitedRangeValue(r1.n + r2.n); 
    } 

    // Other operators by analogy 

    public override string ToString() 
    { 
     return n.ToString(); 
    } 
} 

編輯:由於@Andrew巴伯在評論中指出的那樣,你可以使用(額外)驗證代碼契約。

+0

我想你會發現C#* *有操作符重載... http://msdn.microsoft.com/en-us/library/8edha89s%28VS.71%29.aspx –

+0

@BradleySmith謝謝!不知道;相應地改變了答案。 –