【发布时间】:2011-11-11 09:35:29
【问题描述】:
可能重复:
Why are my privates accessible?
Why are private fields private to the type, not the instance?
很可能我错过了一个明显的事实,但我看不出原因:
当我重写 Equals() 方法并将对象转换为我的类型时,我可以调用它的私有成员没有任何问题!!!
我正在初始化一个实例,我希望它的私有成员不可访问。
但是为什么被转换的对象在 Equals() 方法中向我打开了它的私有部分?
请参阅下面示例代码中的 Equals 实现,看看我是如何到达“那个”实例上的私有字段的:
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();
}
}
【问题讨论】:
-
您是否尝试过修改这些变量,以更改它们的值,请您尝试一下并回复是否有效。