爲什麼在VB.NET中賦值運算符(+ =, - =,* =,/ =)不可重載?爲什麼在VB.NET中賦值運算符不可重載?
回答
也許this是他們的推理:
感謝您的建議!我們不允許您爲某個類型重載 賦值運算符,因爲目前沒有辦法確保其他語言或.NET Framework本身將賦值 賦值運算符。唯一的選擇是限制哪些類型會使賦值運算符過載,但我們認爲這會限制性太強,以至於無法使用。
謝謝!保羅·維克技術負責人,VB
有一些所謂的「窄化」和「拓寬」,它允許你從一種類型的定義明確的和隱含轉換到另一種,即
Dim y as MyClass1
Dim x as MyClass2 = y
但是,這並不讓改變賦值操作符來分配同一個類的實例,只轉換其他類。
參見How to: Define a Conversion Operator
Class MyClass1
Public Shared Widening Operator CType(ByVal p1 As MyClass1) As MyClass2
End Operator
End Class
+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
賦值運算不能被重載,但+ =,例如,使用+評價,其可以被重載。
=, ., ?:, ??, ->, =>, f(x), as, checked, unchecked, default, delegate, is, new, sizeof, typeof
這些運算符不能被重載。
struct MyType1
{
...
public static explicit operator MyType1(MyType2 src) //explicit conversion operator
{
return new MyType1 { guts = src.guts };
}
}
在2004年關閉「無法修復」票 - rofl。希望他們能夠重新考慮這個建議。 – Alain 2012-04-23 14:41:26
是嗎? http://stackoverflow.com/questions/292676/is-there-a-workaround-for-overloading-the-assignment-operator-in-c – Alain 2012-04-23 14:45:47
C#不支持運算符重載:http://msdn.microsoft。 COM/EN-US /庫/ 8edha89s.aspx。解決方法是重載運算符'+',因爲+ =使用它,但仍不能重載'='。 – Alain 2012-04-23 14:48:32
- 1. 重載賦值運算符
- 2. 重載賦值運算符
- 3. 爲什麼C++將賦值(=)視爲重載運算符?
- 4. 爲什麼我不得不在C++中重載賦值運算符?
- 5. 在C++中重載賦值運算符
- 6. Visual C++ 2012:爲什麼priority_queue需要重載賦值運算符?
- 7. TypeScript中的賦值運算符重載
- 8. 運算符重載如何爲賦值運算符工作?
- 9. 重載賦值運算符和任何其他運算符有什麼區別?
- 10. 運算符超載賦值運算符
- 11. C++重載賦值運算符
- 12. C++賦值運算符重載
- 13. 重載賦值運算符標操作
- 14. 複合賦值運算符重載
- 15. 重載複製賦值運算符
- 16. 重載賦值運算符C++
- 17. 重載C++賦值運算符
- 18. 賦值=運算符超載
- 19. 運算符在枚舉上爲組合賦值運算符重載
- 20. 什麼是| =賦值運算符?
- 21. C++在重載的賦值運算符聲明中做了什麼?
- 22. 爲什麼==運算符在MSVC中含糊不清的運算符重載
- 23. 在c#類中重載vb.net&運算符
- 24. 爲什麼重載運算符&&錯誤?
- 25. 運算符+ =重載,爲什麼是const?
- 26. 爲什麼運算符重載失敗?
- 27. 爲什麼賦值運算符返回ref不是指針?
- 28. 爲什麼你不能重載'。'運算符在C++中?
- 29. 爲什麼。*運算符不能在C++中重載?
- 30. 什麼是VB.NET中重載的'And'運算符的例子?
@ Mr.Disappointment - 是啊,發現自己。你能否指出在那篇文章中它說了爲什麼賦值運算符不可重載? – user1351569 2012-04-23 14:36:03
@ Mr.Disappointment - 也許你會讀一些我錯過的東西。 – user1351569 2012-04-23 14:44:46
添加了一些關於隱式/顯式轉換器的東西,可能會幫助您嘗試執行任何操作。 – Alain 2012-04-23 15:00:24