Perché gli operatori di assegnazione (+ =, - =, * =,/=) sono sovraccaricabili in VB.NET?Perché gli operatori di assegnazione non sono sovraccaricabili in VB.NET?
risposta
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
+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
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 };
}
}
Ticket chiuso come "Will not Fix" nel 2004 - rofl. Spero che abbiano rivisitato il suggerimento. – Alain
Lo fa? http://stackoverflow.com/questions/292676/is-there-a-workaro-for-overloading-the-assignment-operator-in-c – Alain
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
@ 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
@ Mr.Disappointment - Pensavo che forse avresti letto qualcosa che mi ero perso. – user1351569
Aggiunti alcuni elementi sui convertitori impliciti/espliciti che potrebbero essere utili con qualsiasi cosa si stia tentando di fare. – Alain