Eventuali duplicati:
Why are my privates accessible?
Why are private fields private to the type, not the instance?Perché i membri privati di un'istanza di classe sono disponibili nel corpo del metodo Equals()?
Molto probabilmente mi manca un fatto ovvio, ma non può veramente vedere la ragione:
Quando ho sovrascrivere l'Equals () metodo e quando lancio l'oggetto sul mio tipo, sono in grado di chiama il i suoi membri privati senza alcun problema !!!
Sto inizializzando un'istanza e mi aspetto che i suoi membri privati non siano raggiungibili.
Ma perché l'oggetto casted apre i suoi elementi personali nel metodo Equals()?
vedere l'implementazione Equals sul codice di esempio e vedere come sto raggiungendo i campi privati sul "che" istanza:
public class Animal
{
private string _name;
private int _age;
public Animal(int age, string name)
{
_name = name;
_age = age;
}
public override bool Equals(object obj)
{
var that = (Animal) obj;
//_name and _age are available on "that" instance
// (But WHY ???)
return
this._age == that._age
&& this._name == that._name;
}
}
class Program
{
static void Main(string[] args)
{
var cat1 = new Animal(5, "HelloKitty");
var cat2 = new Animal(5, "HelloKitty");
Console.Write(cat1.Equals(cat2));
Console.Read();
}
}
Hai provato a modificare queste variabili, per cambiarne il valore, a freddo ti prego di provarlo e rispondi se funziona o meno. – Burimi