为什么在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