说明:
静态成员也称为共享成员,例如静态属性 静态字段 静态方法;静态成员可以在类的实例之间共享。
静态类中只能有静态成员,不能有实例成员,因为静态类不能进行实例化;
在非静态类中 即可以有静态成员 也可以有非静态成员;
只要是静态成员 属性 字段 方法,都需要用类名去调用;
①变量需要被共享的时候
②方法需要被反复的调用的时候
区别:
静态成员需要通过static修饰,非静态成员不需要通过static修饰;
静态成员属于类,可以直接通过“类名.静态成员”的方式访问;
非静态成员,必须实例化对象后,通过对象.实例成员来访问;
当类第一次加载的时候(第一次被加载到内存的时候),该类下的所有的静态成员都会被加载,实例成员有多少个对象,就会创建多少个对象;静态成员会被加载到静态存储区,直到程序退出时才会被释放;
静态成员是需要通过static关键字来修饰的:
static void Main(string[] args)
{
//student st = new student();
//st.Run();
//st.Run("跑", 35, "35m/秒");
//st.Run("", 25, "", "");
//Console.WriteLine(st);
zxc za;
za.i = 32;
Console.WriteLine(za.i);
zxc z = new zxc(20);
z.I = 200;
Console.WriteLine(z.I);
Console.ReadKey();
}
实例成员属于对象,需要通过“对象名.实例成员”来访问:
static void Main(string[] args)
{
student st = new student();
st.Run();
st.Run("跑", 35, "35m/秒");
st.Run("", 25, "", "");
Console.WriteLine(st);
//zxc za;
//za.i = 32;
//Console.WriteLine(za.i);
//zxc z = new zxc(20);
//z.I = 200;
//Console.WriteLine(z.I);
Console.ReadKey();
}
实例构造函数:
1):若构造函数有修饰符extern,则表示该构造函数为外部构造函数,外部构造函数不提供任何实际的实现,函数体中仅由一个分号组成。一般情况下,构造函数总是public类型,若为private类型,表明类不能被实例化。
2):实例构造函数可以重载。(abstract override)
3)::base([参数列表])表明调用基类中相应的构造函数。
4)::this([参数列表])表明调用该类本身所声明的其他构造函数。
5):构造函数中既可以对静态字段进行赋值,也可以对非静态字段进行初始化。
6):实例构造函数不能被继承。若一个类中没有声明任何实例构造函数,系统会自动提供一个不带参数的默认构造函数。
静态构造函数:
1):静态构造函数主要用于初始化一些静态的变量。静态构造函数只会执行一次,而且是在创建此类的第一个实例 或 引用任何静态成员(包括静态方法)之前,由.NET自动调用。
2):静态构造函数没有访问修饰符, 因为是由.NET自动调用的。
3):静态构造函数没有参数。
4):一个类中只能有一个静态构造函数。
5):静态构造函数只能运行一次。
6):静态构造函数不能被继承。
7):若没有写静态构造函数,而类中包含有初始值设定的静态成员,则编译器会自动生成默认的构造函数。
8):静态构造函数与无参的实例构造函数不冲突,可同时出现。
***注意:***实例方法的存在必须要有对象实例的存在,如果对象实例不存在,则实例方法也就没有调用它的主人。静态方法的存在前提是类的存在,所以无需声明和New对象。