Ответ 1
Частные члены являются частными для класса, а не для экземпляра.
Внутри класса Animal вы можете получить доступ к любым частным членам любого экземпляра Animal, который вы передали (или, в этом случае, успешно нажали).
Возможный дубликат:
Почему мои частные лица доступны? Почему частные типы являются закрытыми для типа, а не экземпляра?
Скорее всего, мне не хватает очевидного факта, но я не могу понять причину:
Когда я переопределяю метод Equals(), и когда я бросаю объект в свой тип, , я могу вызвать его частных членов без каких-либо проблем!!!
Я инициализирую экземпляр, и я ожидаю, что его частные члены не будут доступны.
Но почему литой объект открывает мне свои ряды в методе Equals()?
См. реализацию Equals на примере кода ниже и посмотрите, как я попадаю в частные поля в экземпляре "this":
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();
}
}
Частные члены являются частными для класса, а не для экземпляра.
Внутри класса Animal вы можете получить доступ к любым частным членам любого экземпляра Animal, который вы передали (или, в этом случае, успешно нажали).
Частные члены доступны, потому что они являются частными для класса, а не для экземпляра. Поскольку вы находитесь в классе Animal
, вы можете получить доступ к закрытым членам, даже из другого экземпляра.
Здесь ссылка на предыдущее обсуждение этой языковой функции: Почему частные типы являются закрытыми для типа, а не экземпляра?
Потому что public override bool Equals(object obj)
является частью класса Animal
.
Возможно, вы запутались, потому что считали, что Equals
является статическим членом Animal
и, таким образом, не может видеть частных членов Animal. Или, может быть, не xD.