Il commento è molto eloquente:
public static bool operator ==(Guid a, Guid b)
{
// Now compare each of the elements
Questo non ha senso di per sé. Alla ricerca di quella commento altrove nel file:
public bool Equals(Guid g)
{
// Now compare each of the elements
ma anche
// Returns true if and only if the guid represented
// by o is the same as this instance.
public override bool Equals(Object o)
{
Guid g;
// Check that o is a Guid first
if(o == null || !(o is Guid))
return false;
else g = (Guid) o;
// Now compare each of the elements
Il commento ha senso solo in questo ultimo metodo. Questa è un'indicazione molto forte che l'implementazione Guid.Equals(Object)
è arrivata per prima.
Sarebbe male, o almeno non ottimale, se Guid.operator ==
e Guid.Equals(Guid)
stati attuati in cima Guid.Equals(Object)
, come quello ultimo metodo richiede allocazioni inutili, e mentre difficilmente sarà evidente nei casi più comuni, ci sono certamente i confronti Guid
che si verificano in qualche codice in cicli stretti in cui le allocazioni sarebbero misurabili.
Ora, sarebbe stato sicuramente possibile utilizzare operator ==
per utilizzare Equals(Guid)
o viceversa, ma in realtà non è necessario alcun lavoro aggiuntivo per copiarlo e incollarlo due volte anziché una volta.
Votazione per chiusura in base ad un'opinione, non possiamo leggere le menti dei progettisti di framework/sviluppatori. – BradleyDotNET
Penso che sia dovuto a problemi primitivi vs oggetto – nafas
La mia ipotesi sarebbe che l'implementazione dell'operatore esistesse prima dell'aggiunta di 'IEquatable' al framework. Quando è stato aggiunto, hanno scelto di duplicare il codice operatore piuttosto che riscriverlo (forse una politica per evitare di cambiare il vecchio codice?) Questa è pura speculazione, però. Potrebbe anche essere una considerazione di ottimizzazione estremamente ridotta per una linea più aggressiva, ma in questo caso non mi sembrerebbe un motivo particolarmente valido per la ripetizione del codice. O è stato solo un errore e nessuno nella revisione del codice ha pensato che fosse abbastanza brutto da valere lo sforzo di risolvere. –