C#的修饰符:static
声明属于类型本生而不属于实体对象的成员。
一、非静态类
1、非静态类可以包含静态的方法、字段、属性或事件。 静态的类成员属于类级别的,不属于类的任何实例,类外不可以通过类的实体对象来调用静态变量,要用类名来调用,(如现在有一个Student 类,这个类里有一个static string name,当其他类需要调它的时候就要用Student.name);无论对一个类创建多少个实例,它的静态成员都只有一个副本,类里的所有成员都可以访问它,可以改变它的值。 静态方法和属性不能访问其包含类型中的非静态字段和事件,并且不能访问任何对象的实例变量(除非在方法参数中显式传递)。
静态字段有两个常见的用法:一是记录已实例化对象的个数;二是存储必须在所有实例之间共享的值。
静态方法可以被重载但不能被重写,因为它们属于类,不属于类的任何实例。
2、静态成员在第一次被访问之前并且在调用静态构造函数(如有存在)之前进行初始化。 静态构造函数用于初始化任何 静态 数据,或用于执行仅需执行一次的特定操作。 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。
public class Students
{
//定义静态变量
public staic int Num;
//静态构造函数
static Students()
{
Num = 30;
}
}
3、静态构造函数具有以下特点:
静态构造函数既没有访问修饰符,也没有参数。用于对静态字段、只读字段等的初始化。
在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。类的静态构造函数在给定应用程序域中至多执行一次。
静态构造函数是不可继承的,而且不能被直接调用。
在程序中,用户无法控制何时执行静态构造函数。
如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。
4、静态变量的几点说明:
(1)静态方法和静态数据成员相当于共享变量,只有“一份”,为该类的所有对象所共有,因而在需要共享数据时,定义这种类型时很好的选择。 一但定义一个类后(不一定要实例化对象)该类的所有静态成员就载入内存(并不是程序启动,就装入内存,没有定义该类时它不会载入内存) 静态成员的作用域与它所属的类的作用域相同。
(2)方法内部的静态变量,执行完静态变量值不消失,再次执行此对象的方法时,值仍存在,它不是在栈中分配的,是在静态区分析的,(共有两种变量存储在静态存储区:全局变量和static变量)这是与局部变量最大的区别。
(3)由于静态成员函数存在于类一级,并且不是对象的一部分,因此没有 this 指针。在静态方法中引用 this 是错误的。
二、静态类:
声明为static,它仅包含静态成员,不能用new静态类的实例。使用静态类来包含不与特定对象关联的方法。
功能:仅包含静态成员,不能被实例化,是密封的,不能包含实例构造函数,可包含静态构造函数以分配初始值或设置某个静态变量。
优点:编译器能够执行检查以确保不致偶然地添加势力成员。编译器将保证不会创建此类的实例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。