Почему операторы присваивания не перегружаются в VB.NET? [закрыто]

Почему операторы присваивания не(+=, -=, *=, /=) overloadable внутри VB.NET?

1 ответов


возможно этой их рассуждения:

Спасибо за предложение! Мы не позволяем вам перегружать оператор присваивания для типа, поскольку в настоящее время нет возможности убедитесь, что другие языки или сама платформа .NET Framework будут соблюдать оператор присваивания. Единственный вариант-ограничить типы, которые перегружают оператор присваивания, могут делать, но мы чувствовали, что это было бы слишком жестки, чтобы быть полезным.

спасибо! Paul Vick Technical Lead, 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 };
    }
}