2012-04-23 13 views
6

Dlaczego operatorów przypisania (+ =, - =, * =,/=) nie można przeciążać w VB.NET?Dlaczego operatory przypisania nie są przeciążane w VB.NET?

+0

@ Mr.Disappointment - Tak, okazało się, że ja. Czy możesz wskazać, gdzie w tym artykule jest napisane, dlaczego operatorzy przypisania nie są przeciążeni? – user1351569

+0

@ Mr.Disappointment - Pomyślałem, że przeczytałeś coś, co przegapiłem. – user1351569

+0

Dodano pewne informacje na temat niejawnych/jawnych konwerterów, które mogą pomóc w przypadku jakichkolwiek prób wykonania. – Alain

Odpowiedz

10

Może this jest ich rozumowanie:

Dzięki za sugestię! Nie zezwalamy na przeciążanie operatora przypisania dla typu, ponieważ obecnie nie ma sposobu, aby zapewnić, że inne języki lub sama platforma .NET będą honorować operatora przypisania. Jedyną alternatywą jest ograniczenie typów przeciążających operatora przypisania, ale uznaliśmy, że jest to zbyt ograniczające, aby było ogólnie użyteczne.

Dzięki! Paul Vick Lead Technical, VB

Jest coś o nazwie „zwężenie” i „Rozszerzenie”, który pozwala na definiowanie jawnych i ukrytych konwertery z jednego typu na inny, tzn

Dim y as MyClass1 
Dim x as MyClass2 = y 

ale to nie Zmodyfikuj operator przypisania, aby przypisać instancję tej samej klasy, tylko konwertując inne klasy.

Patrz 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#

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

operatorów przypisania nie może być przeciążona, a + = na przykład ocenia się stosując +, które mogą być przeciążone .

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

podmioty te nie mogą być przeciążone.

Z tej samej conversion operators:

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

Bilet zamknięty jako "Nie naprawi" w 2004 r. - rofl. Mam nadzieję, że od tamtej pory przeszli do tej sugestii. – Alain

+0

Czy to? http://stackoverflow.com/questions/292676/is-there-a-workaround-for-overloading-tass-operators-operator-in-c – Alain

+1

C# nie obsługuje przeciążania operatorów: http://msdn.microsoft. com/en-us/library/8edha89s.aspx.Rozwiązaniem ish jest przeciążenie operatora '+', ponieważ + = używa go, ale nadal nie można przeciążać '='. – Alain

Powiązane problemy