對不起,如果標題措辭不佳。比方說,我有射線追蹤器,我希望能夠使用浮標或雙打。我如何才能使用float或double來聲明一個新類的實例?我不想創建兩個類並調用一個雙精度和另一個精度。我怎樣才能讓一個類被聲明爲使用浮動或雙打?
回答
沒有在.NET來處理這一個乾淨的方式。泛型不直接支持算術運算。您可以通過變通辦法(如MiscUtils或通過creation of a separate calculator class and delegating the math to it)解決此問題,但這通常會使代碼比兩個實施更復雜。
您可以在內部使用dynamic
,這也可以。但是,這會增加(輕微)開銷,這可能會降低此功能的實用性。如果性能是您不想僅支持雙精度數學的主要原因,那麼使用動態可能不是一種選擇。
一種選擇是使用T4來創建一個模板,該模板從單個源文件構建兩個版本的代碼。這將爲您提供完整的本地支持,而不需要開銷(本質上只是爲您編寫兩個類)。
您可以使用C#泛型此:
using System;
class Test<T>
{
T _value;
public Test(T t)
{
// The field has the same type as the parameter.
this._value = t;
}
public void Write()
{
Console.WriteLine(this._value);
}
}
class Program
{
static void Main()
{
// Use the generic type Test with an int type parameter.
Test<int> test1 = new Test<int>(5);
// Call the Write method.
test1.Write();
// Use the generic type Test with a string type parameter.
Test<string> test2 = new Test<string>("cat");
test2.Write();
}
}
該博客介紹了它在更詳細一點你http://www.dotnetperls.com/generic
雖然這可行,但你不能用它做很多事情,因爲泛型不支持完整的算術支持。 –
@ReedCopsey這就是爲什麼我希望.NET中的所有數字對象都實現了一個具有所有數學操作的接口。 –
這會有幫助嗎? http://www.codeproject.com/Articles/33617/Arithmetic-in-Generic-Classes-in-C – GracelessROB
- 1. 我怎樣才能重用一個雙
- 2. 我怎樣才能讓jQuery printElement打印一個div與CSS類?
- 3. 我怎樣才能讓使用CSS3
- 4. 我怎樣才能讓StackPanel使用ItemTemplate?
- 5. 我怎樣才能讓
- 6. 我怎樣才能讓一個div節目時,我使用Angular2
- 7. 我怎樣才能使這個LINQ的聲明更復雜的
- 8. 我怎樣才能用Clang生成未使用的聲明?
- 9. 我怎樣才能讓div浮動在對方旁邊?
- 10. 我怎樣才能讓CSS動畫
- 11. 我怎樣才能讓這個更好
- 12. 我怎樣才能成爲一個index.jade?
- 13. 我怎樣才能讓一個類,用於創建和另一個類
- 14. 我怎樣才能使用一個類使用點運算符
- 15. 我怎樣才能讓小孩子能夠向右漂浮?
- 16. 我怎樣才能讓元素在表中被拖動?
- 17. 我怎樣才能讓一個動態的getter/setter
- 18. 我怎樣才能讓這樣的
- 19. 我怎樣才能把「子類」一類
- 20. 我怎樣才能簡化這個SASS聲明?
- 21. 我怎樣才能讓「不是」被突出顯示爲pythonOperator?
- 22. 我怎樣才能打破一個網址,並使用PHP
- 23. 我怎樣才能自動使用mstest?
- 24. 我怎樣才能將錢浮起來?
- 25. 我怎樣才能讓CMake讓「乾淨」只是一個目標?
- 26. 我怎樣才能讓一個浮動在python 3中有特定的範圍(或者我可以)?
- 27. 我怎樣才能知道當一個WCF操作被稱爲
- 28. 我有一個PreferenceFragment,我怎樣才能讓它成爲自己的活動?
- 29. 我怎樣才能讓這個動態表單起作用?
- 30. 我怎樣才能讓pip安裝包一個接一個?
Bah我寫了一個使用動態的整個例子,你的答案將我的水衝出去:(你+1,你贏了這一輪。 –
+1建議T4。 –