public class Card{
        private readonly Suits suit;
        private readonly Ranks rank;
        
        public static bool operator == (Card card1, Card Card2){
return (card1.suit == Card2.suit) && 
(card1.rank == Card2.rank);
}    }
刚刚开始学C#,看到书上的这个例子,为什么在这里静态成员可以访问类的私有变量?
我知道这个问题很幼稚,可是在静态重载==函数里能访问类的私有变量感到很困惑,假设调用如下:Card card1 = new Card();
Card card2 = new Card();
Console.WriteLine("{0}", card1 == card2);
那位高人给解释一下它怎么理解?

解决方案 »

  1.   

    不止静态方法,就算是实例方法也可以访问到,
    private的访问级别就是在类内部可以访问,方法只要在类内部,都是可以访问的
      

  2.   

    高手,可不可以给详细解释下,它在执行card1 == card2时是怎么访问到card1和card2的私有变量的,如果第二个参数是其他类的对象,它还可以正确执行吗?这和C++有什么区别?谢谢!
      

  3.   

    首先,你重载的是==运算符,所以不可能出现第二个参数是其他类对象的情况
    其实要理解这个private访问级别很简单啊,只要是在类内部,都可以访问,出了类的范围就不可以,比如:class A
    {
        private int a1;
        public void Test(A a, B b)
        {
           //这里可以访问a.a1,但不能访问b.b1
        }
    }class B
    {
        private int b1;
        public void Test(A a, B b)
        {
           //这里可以访问b.b1,但不能访问a.a1
        }
    }