日期:2014-05-17  浏览次数:21058 次

c#中静态函数调用类的私有变量的问题,百思不得其解,高手解惑。。。
如题,有下面的类,红色部分为啥能访问私有变量?  
 public class ClassA
    {
        private int iCnt;
        static void TestFunc()
        {
            //iCnt = 5; 这句语法是错的,我可以理解,静态函数不能访问私有成员              

            ClassA clsA = new ClassA();
            clsA.iCnt = 5;//关键是这句不明白了,为啥这样就可以访问ClassA的私有变量呢?
            ClaclsB ssB = new ClassB();
            //clsB.iCntB= 5;//语法错,iCntB是私有成员,不能访问,也能理解 
        }    
    }

public class ClassB
{
    private int iCntB;
}

------解决方案--------------------
iCnt不是静态变量当然需要一个对象了。
你混乱的思维跟着我这样想一下就明白了。

首先,成员变量,是在类的实例分配的时候,分配的内存,这个变量属于某个对象。所以,访问必须写对象的引用,内部:this.变量,外部用 对象.变量。内部可以省略this.不写,但实际也是this.变量的。这一点记住,也不用怀疑。

其次,类的内部的方法访问自己内部变量是不受private限制,可以访问变量。没错的,记住就好。

那么静态方法也是方法,当然可以访问自己的成员变量。只是非静态函数访问方法为
this.变量
或写
变量
静态方法没有this指针,所以要写对象的引用.变量。

再给你介绍一个。

实际上静态函数和非静态函数有什么区别呢?就一个,非静态函数,系统会默认的传递一个this变量,this表示了当前调用方法的对象。

我想你仔细多看几次应该明白了。
------解决方案--------------------
你要明白Private关键字的访问限制,理解一下下面这句话或许有帮助:

任何用关键字Private修饰的成员只能被类内部的非静态方法或是在该类中声明的此类的
对象访问,而不能被其在类外部声明的此类的对象或其他对象或方法访问