目录
1. 静态类
1.1 静态成员
静态成员又叫类成员,是指在成员类型或返回值类型前使用static关键字修饰的变量或方法。在C#中,能够声明为静态成员的类成员包含静态成员、静态属性、静态方法、构造函数、运算符、事件等类成员。常量和索引器不能声明为静态成员。
1.2 静态字段
1.2.1 定义
访问修饰符 static 数据类型 字段名 = 初始值;
public class Student
{
public static int count;
}
1.2.2 访问
//(1)类内访问
public class Student
{
public static int count;
void Set()
{
count = 100;
}
}
//(2)类外访问:类名.字段名
Student.count = 0;
1.3 静态方法
1.3.1 定义
访问修饰符 static 返回类型 方法名(参数列表)
{
方法体;
}
public class Student
{
public static int count;
public static int Get()
{
return count;
}
}
1.3.2 访问
//(1)类内访问
public class Student
{
public static int count;
public static int Get()
{
return count;
}
public static void Show()
{
Console.WriteLine("Count = {0}",Get());
}
}
//(2)类外访问:类名.静态方法名(参数列表)
int Result = Student.Get();
1.4 静态成员关键
(1)静态成员用static关键词声明
(2)静态成员用类名调用
(3)子类继承父类,也会继承父类的静态成员
(4)静态成员属于类,不属于类的对象
(5)静态成员不能用关键字this和base
1.5 静态方法与实例方法区别
(1)用static修饰的方法为静态方法,反之则是实例方法(非静态方法)
(2)静态方法不需要类实例化就可以调用,实例方法需要类实例化才可以调用。
(3)静态方法只能直接访问本类中的静态成员,不能直接访问本类的的实例成员。实例方法既可以直接访问本类的静态成员,也可以直接访问本类的实例成员。(实例方法可以调用静态方法,静态方法不能调用实例方法)
(4)静态方法不能被子类重写,也不能实现多态
(5)静态成员是在第一次使用时进行初始化,实例成员是在创建对象时初始化。
(6)静态成员不能自动进行销毁内存,而实例化的对象不再使用时,CLR会自动清除这些对象所占的内存。在程序设计中尽量不要使用静态成员。
(7)当不需要访问某个实例的成员变量,可把该方法设为静态方法。反之设为实例方法。
1.4 静态类
1.4.1 定义
访问修饰符 static class 类名 : 基类或接口
{
访问修饰符 static 类的成员1;
…
访问修饰符 static 类的成员n;
}
在声明类时使用static则声明该类是静态类,静态类中仅包含静态成员。 对于静态类,不能使用new关键字创建静态类的实例。
静态类在加载包含该类的程序或命名空间时由.NET Framework公共语言运行库(CLR)自动加载。
1.4.2 访问
//类名.成员名
访问静态类成员的方法与访问非静态类中静态成员的方法相同。
静态类不创建对象,主要用于工具类,全局变量。
1.4.3 静态构造函数
静态构造函数用来初始化静态变量。
static 类名()
{
静态构造函数的成员;
…;
}
class Student
{
public static int count;
//静态构造函数
static Student()
{
count = 10;
}
public static int Get()
{
return count;
}
public static void Show()
{
Console.WriteLine("Count = {0}",Get());
}
}
关键:
1.静态构造函数无访问修饰符,无参数,无返回类型,只有一个static关键字。
2.一个类只能有一个静态构造函数。
3.非静态类也可以静态构造函数,可以与无参的实例构造函数共存。
4.不可显式调用静态构造函数,当创建第一个实例或引用静态成员之前,自动调用静态构造函数来初始化类,并且只执行一次。
5.定义静态成员初始化,同时在静态构造函数进行初始化,则以静态构造函数为主。
6.静态构造函数不可被继承。
2. 密封类
2.1 密封类定义
访问修饰符 sealed class 类名 : 基类或接口
{
类的成员;
}
在类的定义中使用sealed关键字声明的类称为密封类,密封类不能作为基类和派生类,也不能是抽象类。
2.2 密封方法
访问修饰符 sealed override 方法名称(参数列表)
{
方法体;
}
密封方法会重写基类中的virtual方法,但其本身不能在任何派生类中进一步重写,如果实例方法声明包含sealed修饰符,则它必须包含override修饰符。