静态和非静态
一、引言
在自定义类和.NET Framework类库中都可以发现,类中大部分是一个类,很少是静态类,那到底静态类是否真的需要?
其实程序上的设计都是必须的,所有的设计都是来源于生活,来源于客户分析。在程序设计初期,需要业务逻辑,明确编写流程,以防后期各种修改。
比如设计个学校的管理软件,记录每个学生的信息,包括班级、学校、成绩、年龄。因为每个学生是不同的,可以为建立学生类,其中因为每个学生年龄、成绩不同,所以这两个特征设为非静态字段。但是很多学生的班级是一样的,所以班级这个字段可以设为静态的字段。至于静态类,可以就是定义学校为静态类,因为所有的学生的学校是相同的。
综上所述,静态还是很管用的,这么做的目的其实很是节省资源。静态类和静态字段,在内存中只分配一次内存。非静态的每次初始化,则要重新分配内存。
二 、静态特征和非静态特征的区别
- 1、静态类和非静态类
• 静态类和非静态类在定义是一样的,就是在静态类定义是前面添加static修饰符。
• 非静态类中只能包含静态成员、静态函数。而非静态类中可以包含静态成员和非静态成员。当然静态方法中只能用静态成员。
• 静态类要记得不能实例化,其中成员访问只能通多类来访问。
- 2、静态构造函数和非静态构造函数
• 在非静态类中可以有静态构造函数,用于初始化静态成员。
• 静态构造函数可以与的实例构造函数同时存在,且静态构造函数只有一个,实例构造函数可以重载多个。
• 静态构造函数在CLR加载类时执行,且只被执行一次,然而实例构造函数在每次实例创建时都会执行
• 静态构造函数只能对静态成员初始化,不能对非静态成员进行初始化操作,然而实例构造函数,既可以初始化实例成员也可以初始化静态成员,但静态只读字段除外
- 下面引用个构造函数执行顺序。
-
3、静态字段、属性、方法和非静态字段、属性、方法
• 类中包含静态字段和属性时,字段一般设置为private,属性设置为public,体现类的封装性。例如:
Private string name;
Public string Name
{
Get
{
Return name;
}
}
• 访问性:静态中字段、属性、方法只能通过类中访问,非静态中则通过实例来访问。
• 内存分配:内存中静态的成员只分配一份,而实例化对象每次实例化时都要分配一块内存区域。
• 方法内部访问:静态方法只能访问静态成员和方法,也可通过实例对象间接访问实例字段、方法。
• 方法调用:在类中内存访问时,静态不能通过this,这个类似实例指针。
• 派生性:
• 静态方法不能被标识为virtual、abstract或override,静态方法可以被派生访问,但是不能被派生类重写
三、总结
在程序设计中一定要善于应用静态变量和静态类,静态变量和静态类从流程图可以得到其存存活时间是比实例长,可以有效的节省内存,其实静态类型在一定程度上get应用较多,set较少。