2012-04-23 17 views
6

¿Por qué los operadores de asignación (+ =, - =, * =,/=) no se pueden cargar en VB.NET?¿Por qué los operadores de asignación no se pueden cargar en VB.NET?

+0

@ Mr.Disappointment - Sí, encontraron que a mí mismo. ¿Podría indicarnos en qué parte de ese artículo dice por qué los operadores de asignación no son sobrecargados? – user1351569

+0

@ Mr. Disppointment - Pensé que tal vez leerías algo que me había perdido. – user1351569

+0

Se agregaron algunas cosas sobre los convertidores implícitos/explícitos que pueden ayudar con lo que sea que intente hacer. – Alain

Respuesta

10

Quizás this es su razonamiento:

Gracias por la sugerencia! No le permitimos sobrecargar el operador de asignación para un tipo porque actualmente no hay manera de asegurarse de que otros lenguajes o .NET Framework cumplan con el operador de asignación. La única alternativa es restringir los tipos de que sobrecarguen al operador de asignación, pero creemos que sería demasiado restrictivo para ser útil en general.

Gracias! Paul Vick responsable técnico, VB

Hay algo que se llama 'El estrechamiento' y 'Ampliación', que le permite definir convertidores explícitos e implícitos de un tipo a otro, es decir

Dim y as MyClass1 
Dim x as MyClass2 = y 

Pero eso no cambie el operador de asignación para asignar una instancia de la misma clase, solo convierta otras clases.

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

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

operadores de asignación no puede sobrecargarse, pero + =, por ejemplo, se evalúa usando +, que puede ser sobrecargado .

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

Estos operadores no pueden ser sobrecargados.

Con el mismo conversion operators:

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

Boleto cerrado como "No se arregla" en 2004 - rofl. Aquí está la esperanza de que hayan revisado la sugerencia. – Alain

+0

¿Lo tiene? http://stackoverflow.com/questions/292676/is-there-a-workaround-for-overloading-the-assignment-operator-in-c – Alain

+1

C# no admite sobrecargas del operador: http://msdn.microsoft. com/en-us/library/8edha89s.aspx.Una solución alternativa es sobrecargar al operador '+', ya que + = lo usa, pero aún así no puede sobrecargar '='. – Alain

Cuestiones relacionadas