为什么在VB.NET中无法重载赋值运算符(+=,-=,*=,/=)?
(译者注:重载指的是自定义运算符行为。)
为什么在VB.NET中无法重载赋值运算符(+=,-=,*=,/=)?
或许这里是他们的原因:
感谢您的建议!我们不允许您重载类型的赋值运算符,因为目前没有办法确保其他语言或.NET框架本身会遵守赋值运算符。唯一的选择是限制那些重载赋值运算符的类型能做什么,但我们认为这样做过于严格,不太实用。
谢谢!Paul Vick 技术负责人,VB
还有一种叫作“缩小”和“扩大”的方法,可以定义从一种类型到另一种类型的显式和隐式转换器,例如:
Dim y as MyClass1
Dim x as MyClass2 = y
但这并不允许更改分配操作符以分配同一类的实例,只能转换其他类。
请参见如何定义转换运算符
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 };
}
}
+
,因为 +=
使用它,但你仍然不能重载 =
。 - Alain