2014-10-17 82 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');