Il sovraccarico di operator==
in C# è zucchero sintattico per il richiamo di una funzione statica. La risoluzione di sovraccarico, come tutte le risoluzioni di sovraccarico, si basa sul tipo statico dell'oggetto, non sul tipo dinamico. Diamo un'occhiata a Object.ReferenceEquals
ancora:
public static bool ReferenceEquals (Object objA, Object objB) {
return objA == objB;
}
Qui, il tipo statico di objA
e objB
è Object
. Il tipo dinamico può essere qualsiasi cosa; una stringa, qualche altro tipo definito dall'utente, qualunque sia; non importa. La determinazione di cui viene chiamato lo operator==
viene determinata staticamente quando questa funzione viene compilata, in modo da ottenere sempre quella predefinita, non sovraccaricata, incorporata nella lingua. .NET non poteva semplicemente avere un ReferenceEquals
e consentire agli utenti di fare ((object)a) == ((object)b)
, ma avere una funzione specifica per dire cosa sta succedendo migliora la chiarezza.
Object.Equals
, d'altra parte, è solo una funzione virtuale. Di conseguenza, la scelta di Equals
si basa sul tipo dinamico dell'oggetto a sinistra dello .Equals(
, come qualsiasi altra chiamata di funzione virtuale.
fonte
2015-12-09 07:24:32
Sono piuttosto sicuro della sua parte del linguaggio C# stesso e non parte degli oggetti. – Nahum
è una funzionalità derivata dal linguaggio C#. ** Per impostazione predefinita, l'operatore == verifica l'uguaglianza di riferimento determinando se due riferimenti indicano lo stesso oggetto, quindi i tipi di riferimento non devono implementare l'operatore == per ottenere questa funzionalità. ** - da [msdn] (https : //msdn.microsoft.com/en-US/library/ms173147 (v = vs.80) aspx # ANCHOR_1) –