如何在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