如何在c#中创建新类型?例如字节有范围0到255,但我需要新类型,将有0到10范围。如何声明新类型
如何声明新类型
回答
令人惊讶的是,人们想要关闭这不是一个真正的问题!
答案是C#没有支持在编译时检查整数范围的类型系统,除了一些内置的情况:它会阻止您将较大范围的数字分配给较小范围的数字。但是这些数字的范围是在语言规范中预先定义的。
我同意你的意见。没有人理解我问,甚至没有回答这个问题,就没有人给出正确答案和结束问题。 – Tomas
您创建了一个包装类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巴伯在评论中指出的那样,你可以使用(额外)验证代码契约。
我想你会发现C#* *有操作符重载... http://msdn.microsoft.com/en-us/library/8edha89s%28VS.71%29.aspx –
@BradleySmith谢谢!不知道;相应地改变了答案。 –
- 1. 声明新类型
- 2. 如何声明新类型的数组?
- 3. 新类型声明函数?
- 4. 如何声明类属性的类型?
- 5. 如何声明新的JavaScript对象类型,如果它尚未声明
- 6. Haskell类型声明
- 7. 无类型声明
- 8. Data.Map类型声明
- 9. Java类型声明
- 10. 声明的类型
- 11. 声明typedef类型
- 12. Storage.prototype.setObject声明类型
- 13. 空类型声明
- 14. 声明新的数字类型
- 15. 声明新的类型Jboss Drools
- 16. 声明新窗体变量类型VB.NET
- 17. 如何声明RLMArray类型添加NSString
- 18. 如何用Procfile声明过程类型?
- 19. 如何添加类型实例声明
- 20. 如何转发声明CoreFoundation类型?
- 21. 如何在C++中声明HashMap类型
- 22. 如何声明System.Collections.Generic.IEnumerable类型的变量?
- 23. 如何扩展类型声明?
- 24. 如何声明Android偏好的类型?
- 25. Java泛型 - 类型声明
- 26. 无法为Kubernetes API类型声明声明Kind类型
- 27. 如何处理:重新声明C++内置类型'char16_t'
- 28. 如何在Scala中声明新的部分函数类型
- 29. 如何删除/重新定义AspectJ中的类型间声明?
- 30. 如何在Haskell中声明带有类型约束的新类型?
你通常如何创建一个新类型? public class blah ....创建一个新类型来做这件事似乎很没有意义...... –
你确定你需要一个新类型,而不是仅仅是输入验证吗? –
如何在编译时设置范围验证和类型验证?例如我不能为字节类型设置字符串,我得到编译错误。如何为我的类型做同样的事情? – Tomas