c# - 为什么类实例的私有(private)成员在 Equals() 方法体中可用?

标签 c# .net oop clr equals

<分区>

Possible Duplicate:
Why are my privates accessible?
Why are private fields private to the type, not the instance?

很可能我遗漏了一个明显的事实,但我真的看不出原因:

当我覆盖 Equals() 方法并且当我将对象转换为我的类型时,我能够调用它的私有(private)成员没有任何问题!

我正在初始化一个实例,我希望它的私有(private)成员不可访问。

但是为什么被转换的对象在 Equals() 方法中向我开放它的私有(private)?

查看下面示例代码中的 Equals 实现,看看我是如何到达“that”实例上的私有(private)字段的:

 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();
        }
    }

最佳答案

私有(private)成员是类私有(private)的,而不是实例私有(private)的。

在 Animal 类中,您可以访问传递给您的 Animal 的任何实例的任何私有(private)成员(或者,在本例中,成功转换为)。

关于c# - 为什么类实例的私有(private)成员在 Equals() 方法体中可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7321514/

相关文章:

java - 如何在 Java 中正确建模战舰游戏

python - 在 PyTorch 中,grad_fn 属性究竟存储了什么以及它是如何使用的?

c# - 使用 $.getJson 方法从 jquery 调用 c# mvc Controller 方法

c# - 在一个表单中更改的 TextBox 上,使用事件和委托(delegate)更改另一个表单上的 GridView 内容

c# - WinForm 中的 Application.DoEvents

c# - 动态函数列表并动态调用它们

c# - WPF DataGrid,DataGrid 上选定的行颜色 MVVM 中的 SelectedItem 更改

c# - DbContext.Set<T>().SqlQuery 加载相关实体

.NET Graphics.drawstring

java - 为什么强制转换异常在 Java 中是致命的?