Dopo aver sovraccaricato l'operatore ==, come confrontare se due variabili puntano sullo stesso oggetto?

StackOverflow https://stackoverflow.com/questions/617757

Domanda

Sovraccarico dell'operatore di confronto, come confrontare se le due variabili puntano allo stesso oggetto (ovvero non valore)

public static bool operator ==(Landscape a, Landscape b)
{
    return a.Width == b.Width && a.Height == b.Height;
}

public static bool operator !=(Landscape a, Landscape b)
{
    return !(a.Width == b.Width && a.Height == b.Height);
}
È stato utile?

Soluzione

Utilizza il metodo statico Object.ReferenceEquals.

Naturalmente, affinché il metodo == e! = mantenga la loro piena funzionalità, dovresti anche eseguire l'override di Equals e GetHashCode in modo che restituiscano una serie coerente di risposte ai chiamanti.

Altri suggerimenti

Per verificare se entrambi puntano allo stesso oggetto. È necessario utilizzare il metodo Object.ReferenceEquals. Restituirà vero se entrambi sono uguali o entrambi sono nulli. Altrimenti restituirà false

So che è una vecchia domanda, ma se hai intenzione di sovraccaricare il metodo == o Object.Equals, dovresti anche sovraccaricare l'operatore inverso! =.

E in questo caso, poiché stai confrontando i numeri interni, dovresti sovraccaricare gli altri operatori di confronto < ;, > ;, < =, > =.

Le persone che consumeranno la tua classe in futuro, che si tratti di consumatori di terze parti o di sviluppatori che assumono il tuo codice, potrebbero usare qualcosa come CodeRush o Refactor, che automaticamente " capovolgi " ; la logica (chiamata anche invertire il condizionale) e quindi appiattirla, per uscire dalla sindrome di if annidata. Se il loro codice lo fa, e hai sovraccaricato l'operatore == senza sovraccaricare l'operatore! =, Potrebbe cambiare il significato previsto del tuo codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top