为什么没有赋值运算符重载在VB.NET? [关闭](Why aren't assignm

2019-09-16 17:06发布

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

Answer 1:

也许, 这就是他们的理由:

感谢您的建议! 我们不会让你重载赋值运算符的类型,因为目前还没有办法确保其他语言或.NET Framework本身将履行赋值运算符。 唯一的办法是限制重载赋值运算符可以做什么类型的,但我们认为,这将是过于严格是普遍有用。

谢谢! 保罗·维克技术负责人,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

同在C#

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

赋值运算符不能被重载,但+ =,例如,使用+,它可以被重载评价。

=, ., ?:, ??, ->, =>, 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 };
    }
}


文章来源: Why aren't assignment operators overloadable in VB.NET? [closed]