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修饰的成员只能被类内部的非静态方法或是在该类中声明的此类的
对象访问,而不能被其在类外部声明的此类的对象或其他对象或方法访问