使用Static修饰符修饰的方法是静态方法,反之是非静态方法,静态方法和静态变量在创建后始终存在于同一块内存中,它不属于某一个类的具体实例,而是属于类本身,而每创建一个类的实例,系统都会为每一个非静态成员分配一个内存空间,而静态成员无论创建多少实例,类的静态成员在内存中都只占有同一块内存区域.静态字段和静态成员通常适用于一些不会 经常变化而用频繁使用的数据,如数据库连接字符串,同时由于不会自动销毁,需及时进行回收.
C#中静态方法和非静态方法区别:
C#静态方法为类所有,在类实例化之前即可使用,非静态方法可以访问类中的任何成员(包括静态成员),而静态方法只能访问静态成员,所以Static内存只能存在Static变量和Static方法,正因为Static方法为类所有,所以在Static内部不能使用this关键字(this表示当前对象,Static不能为类实例所访问),类的静态方法在类实例化之前就可以使用,而类中的非静态成员必须在类实例化后才可以分配内存.静态方法的效率比非静态方法高,静态方法的缺点是不会自动进行销毁,而实例化的方法可以自动销毁.静态方法和静态变量创建后始终使用同一块内存,而使用实例化的方法会创建多个内存.
Class Test{
public int k;
pubic Static int b;
public int c;
Test(){ c=5}
}
在这段代码中程序的执行顺序中b>c>k,即静态成员在类实例化之前就已分配内存空间,非静态成员必须在类实例化后才分配内存空间,而在实实例化后刚必须
调用类的构造函数,所以变量的实例化顺序是: 静态成员>构造函数>非静态成员
class A{
int x;
Static int y;
Static void F(){
x=1; //错误,不允许访问
y=2; //正确
}
}
静态方法F()可以访问静态成员y,但是不能访问非静态成员x,因为x作为非静态成员,在类的每一个实例中都占有一个内存存储,而静态方法是类所共享的,他无法判断当前的x是哪个类的实例,所以不知道中内存的哪个地址去读取x,而y作为静态成员,所有类的实例都公用一个副本,很容易找到地址.
私有构造函数: 私有构造函数的类不能被实例化,因为private的访问级别是私有的,只能在类里面访问,类外面访问不了
protected: 保护级别,当前类和其派生类(子类)中可以访问
Internal :默认级别,当前程序集中使用