C#是一種多功能語言;它給你很大的自由來操縱你自己的和現有的類。您可以重載運算符以將+
和*
用於自定義對象,並且可以擴展現有對象以向其中添加新方法。但出於某種原因,C#不允許您將操作符重載作爲現有類的擴展。爲什麼是這樣?是否有解決方法,或者如果我想爲現有類編寫運算符重載,那麼我應該只製作.Plus()
和.Times()
擴展方法?C# - 操作符重載擴展
2
A
回答
1
三個選項:
- 他們的子類,並寫重載子類
- 使用微軟的各個類別公開的源代碼(或反編譯它們),並撰寫過載。這從長遠來看是不可維護的,或者一定很容易,但它會起作用。
- 堅持你的擴展方法。
- 您的班級與「克隆」班級之間的轉換操作符如下所述。
在評論中,OP特別提到了使用System.Drawing.PointF
。我過去所做的與此類密封類一樣,是使用.NET源代碼開發第二個類似的類,如上所述。我們稱之爲第二類MyCustomPointF
。我可以爲我的新課程編寫操作符。但是我也要添加的是所謂的implicit conversion operator,它幫助編譯器在我需要的時候(不調用外部轉換函數)將我的類的實例轉換回System.Drawing.PointF
實例。這並不完美,但它是一種選擇。
相關問題
- 1. C++重載操作符==
- 2. C++:重載操作符=
- 3. C++重載操作符
- 4. C++操作符重載
- 5. C#重載==操作符類
- 6. C++操作符重載,
- 7. C#操作符重載==
- 8. C++操作符重載
- 9. C#重載==操作符
- 10. C++重載==操作符
- 11. C++重載我的重載操作符?
- 12. C# - 重載擴展方法
- 13. C++操作符重載和符號
- 14. C++重載操作符工作
- 15. C++重載=操作
- 16. 重載==操作符
- 17. Nim操作符重載
- 18. 使用操作符重載在C++
- 19. C++操作符重載 - 查詢
- 20. C#優化重載操作符
- 21. 突破重載提取操作符? (C++)
- 22. 重載操作符+ =和+矩陣C++
- 23. C++模板操作符重載
- 24. C++我應該重載操作符嗎?
- 25. C++重載輸出操作符
- 26. 操作符重載和繼承C#
- 27. ()操作符重載在左側C++
- 28. 帶類的C++重載操作符
- 29. C++操作符「>>」重載錯誤
- 30. C++重載操作符double * Vec
要清楚,_extension methods_不會將新方法添加到現有對象。它們允許調用帶有第一個類型的第一個參數的靜態方法,該類型的第一個參數可以通過類型繼承的類的實例上的「點運算符」語法來選擇性地調用。這只是「語法糖」。 –