2012-04-23 16 views
6

Perché gli operatori di assegnazione (+ =, - =, * =,/=) sono sovraccaricabili in VB.NET?Perché gli operatori di assegnazione non sono sovraccaricabili in VB.NET?

+0

@ Mr.Disappointment - Yup, ha scoperto che io stesso. Potrebbe indicare dove in quell'articolo si dice perché gli operatori di assegnazione non siano sovraccarichi? – user1351569

+0

@ Mr.Disappointment - Pensavo che forse avresti letto qualcosa che mi ero perso. – user1351569

+0

Aggiunti alcuni elementi sui convertitori impliciti/espliciti che potrebbero essere utili con qualsiasi cosa si stia tentando di fare. – Alain

risposta

10

Forse this è il loro ragionamento:

Grazie per il suggerimento! Non è consentito sovraccaricare l'operatore di assegnazione per un tipo poiché non esiste attualmente alcun modo per assicurarsi che altri linguaggi o lo stesso .NET Framework onorino lo operatore di assegnazione. L'unica alternativa è limitare i tipi di che possono sovraccaricare l'operatore di assegnazione, ma abbiamo ritenuto che sarebbe troppo restrittivo per essere generalmente utile.

Grazie! Paul Vick Technical Lead, VB

C'è qualcosa chiamato 'Restringimento' e 'ampliamento', che permette di definire convertitori espliciti ed impliciti da un tipo ad un altro, vale a dire

Dim y as MyClass1 
Dim x as MyClass2 = y 

ma questo non significa lascia che cambi l'operatore di assegnazione per assegnare un'istanza della stessa classe, solo convertendo altre classi.

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

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

operatori assegnazione non può essere sovraccaricato, ma + =, per esempio, viene valutata utilizzando +, che può essere sovraccaricato .

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

Questi operatori non può essere sovraccaricato.

Con lo stesso conversion operators:

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

Ticket chiuso come "Will not Fix" nel 2004 - rofl. Spero che abbiano rivisitato il suggerimento. – Alain

+0

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

+1

C# non supporta gli overload dell'operatore: http://msdn.microsoft. com/it-it/library/8edha89s.aspx.Una soluzione ish consiste nel sovraccaricare l'operatore '+', poiché + = lo usa, ma non è ancora possibile sovraccaricare '='. – Alain

Problemi correlati