为什么赋值运算符在VB.NET中不可重载?

时间:2012-04-23 14:30:53

标签: vb.net operator-overloading

为什么VB.NET中的赋值运算符(+ =, - =,* =,/ =)不可重载?

1 个答案:

答案 0 :(得分:10)

也许this是他们的推理:

  

感谢您的建议!我们不允许你超载   一个类型的赋值运算符,因为目前没有办法   确保其他语言或.NET Framework本身可以兑现   赋值运算符。唯一的选择是限制什么   赋值运算符重载的类型可以做,但我们觉得   这种限制性太大,无法普遍使用。

     

谢谢! Paul Vick技术主管,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

Same in C#

  

+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=

     

分配运算符不能重载,但是+ =,例如,使用+来计算,可以重载。

=, ., ?:, ??, ->, =>, f(x), as, checked, unchecked, default, delegate, is, new, sizeof, typeof

  

这些运营商不能超载。

使用相同的conversion operators

struct MyType1
{
    ...
    public static explicit operator MyType1(MyType2 src)  //explicit conversion operator
    {
        return new MyType1 { guts = src.guts };
    }
}