2014-10-17 81 views
0

我正在建立一個計算器,我想要一個名爲ButtonDigit的類型,其中可能包含字符09,我想將其稱爲ButtonDigit'. Ideally it would be derived from char`,但那不是允許的,我不希望一個對象,如:模擬從值類型派生

public class ButtonChar 
{ 
    public char Value { get; set; } 
} 

我發現,相當笨拙不必總是實例化一個對象ButtonChar並訪問Value財產時,我想存儲的字符。最理想的是字符集0-9的別名類型,但我們不明白。我是否堅持使用ButtonChar對象或簡單的char並始終檢查它是否在範圍內?

+0

這是什麼語言? – TGH 2014-10-17 04:14:15

+0

@TGH,對不起,我添加了我第一次忘記的C#標籤。 – ProfK 2014-10-17 04:16:05

+0

ButtonChar和char之間有什麼區別? – 2014-10-17 08:28:40

回答

0

char是一個結構體,所以你不能繼承它。我會說自定義ButtonChar類是一個體面的方法,雖然。

另一種方法是隻創建了一堆燒焦的常數

public static class MyConstants 
{ 
    public static char Zero{get{return '0';}} 
    .... 
} 

的範圍比較會很容易,因爲它是一個連續範圍0-9

+0

我甚至在閱讀這篇文章之前就已經使用了常量,但它很小巧,儘管samy使用泛型的建議在技術上更加可取。 – ProfK 2014-10-27 04:01:09

1

使用generic class處理不同類型的

public class Button<T> 
{ 
    public T {get;set;} 
} 

您可以在setter上添加一個通用驗證系統 - 例如,通過保留將應用於任何輸入的Func列表,例如:

var validations = new List<Func<T, bool>>(); 
if (validations.Any(validation => !validation(tValue))) { 
    throw new InvalidValueException(tValue); 
} 

// in the char example 
validations.Add(myChar => myChar <= '9' && myChar >= '0');