7

代入演算子 (+=、-=、*=、/=) が VB.NET でオーバーロードできないのはなぜですか?

4

1 に答える 1

11

おそらくこれが彼らの推論です:

提案をありがとう!現在、他の言語または .NET Framework 自体が代入演算子を尊重することを保証する方法がないため、型の代入演算子をオーバーロードすることはできません。唯一の代替手段は、代入演算子ができるオーバーロードの型を制限することですが、これは制限が多すぎて一般的には役に立たないと感じました。

ありがとう!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

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 };
    }
}
于 2012-04-23T14:39:19.770 に答える