2011-08-16 1 views
6

Eventuali duplicati:
Why must we define both == and != in C#?sovraccarico + =, +, == e = gli operatori

Perché sovraccarico del + = possibile solo da sovraccarico di +, ma == e! = sono sovraccaricati separatamente?
Sembra che dovrebbe essere invertito.
+ = l'overloading è quasi sempre possibile scrivere in modo più efficace perché non è necessario allocare memoria per il nuovo oggetto. Ma non riesco a inventare un esempio in cui gli operatori == e! = Dovrebbero essere diversi in qualcosa tranne che invertendo il risultato Equals().

risposta

7

Una domanda simile è stata asked before.

Il motivo principale è che quando si sovraccaricano gli operatori == e !=, non è necessario restituire un valore booleano. Se non stai restituendo un booleano, non puoi semplicemente invertire l'operatore complementare. Ci sono altre possibili ragioni per cui sono sovraccaricati separatamente, è possibile visualizzare le risposte a tale domanda per gli altri motivi.

C'è un motivo valido per cui non è possibile sovraccaricare += e pertanto viene eseguito implicitamente tramite l'operatore +. Ho a che fare con il fatto che non è possibile ignorare l'operatore di assegnazione in C#, è parte dello standard di linguaggio. Lo += è incrementato e assegnato, l'ultimo dei quali non è possibile sovraccaricare in C#.

+4

+1 Immaginate la follia se poteste sovraccaricare '+' e '+ =' separatamente ... –

+0

Se C# e .net non facevano cose cattive con strutture mutabili (le strutture mutevoli non sono malvagie - alcune le cose .net fa con loro lo sono), o se permettessero alle classi di limitare la malvagia condivisione promiscua dei riferimenti ai loro oggetti, sarebbe utile avere operatori separati + = e +, poiché usare l'operatore "+" implicherebbe fare un copia e lascia intatto l'originale, mentre "+ =" implica che l'originale può essere modificato. Nota, btw, che gli eventi supportano "+ =" e "- =", ma non supportano "+" e "-". – supercat