• 静态和非静态


    一、引言

    在自定义类和.NET Framework类库中都可以发现,类中大部分是一个类,很少是静态类,那到底静态类是否真的需要?
    其实程序上的设计都是必须的,所有的设计都是来源于生活,来源于客户分析。在程序设计初期,需要业务逻辑,明确编写流程,以防后期各种修改。
    比如设计个学校的管理软件,记录每个学生的信息,包括班级、学校、成绩、年龄。因为每个学生是不同的,可以为建立学生类,其中因为每个学生年龄、成绩不同,所以这两个特征设为非静态字段。但是很多学生的班级是一样的,所以班级这个字段可以设为静态的字段。至于静态类,可以就是定义学校为静态类,因为所有的学生的学校是相同的。
    综上所述,静态还是很管用的,这么做的目的其实很是节省资源。静态类和静态字段,在内存中只分配一次内存。非静态的每次初始化,则要重新分配内存。

    二 、静态特征和非静态特征的区别

    • 1、静态类和非静态类

    • 静态类和非静态类在定义是一样的,就是在静态类定义是前面添加static修饰符。
    • 非静态类中只能包含静态成员、静态函数。而非静态类中可以包含静态成员和非静态成员。当然静态方法中只能用静态成员。
    • 静态类要记得不能实例化,其中成员访问只能通多类来访问。

    • 2、静态构造函数和非静态构造函数

    • 在非静态类中可以有静态构造函数,用于初始化静态成员。
    • 静态构造函数可以与的实例构造函数同时存在,且静态构造函数只有一个,实例构造函数可以重载多个。
    • 静态构造函数在CLR加载类时执行,且只被执行一次,然而实例构造函数在每次实例创建时都会执行
    • 静态构造函数只能对静态成员初始化,不能对非静态成员进行初始化操作,然而实例构造函数,既可以初始化实例成员也可以初始化静态成员,但静态只读字段除外

    • 下面引用个构造函数执行顺序。
    • 这里写图片描述

    • 3、静态字段、属性、方法和非静态字段、属性、方法

    • 类中包含静态字段和属性时,字段一般设置为private,属性设置为public,体现类的封装性。例如:
    Private string name;
    Public string Name
    {
    Get
    {
    Return name;
    }
    }
    • 访问性:静态中字段、属性、方法只能通过类中访问,非静态中则通过实例来访问。
    • 内存分配:内存中静态的成员只分配一份,而实例化对象每次实例化时都要分配一块内存区域。
    • 方法内部访问:静态方法只能访问静态成员和方法,也可通过实例对象间接访问实例字段、方法。
    • 方法调用:在类中内存访问时,静态不能通过this,这个类似实例指针。
    • 派生性:
    • 静态方法不能被标识为virtual、abstract或override,静态方法可以被派生访问,但是不能被派生类重写
    三、总结
    在程序设计中一定要善于应用静态变量和静态类,静态变量和静态类从流程图可以得到其存存活时间是比实例长,可以有效的节省内存,其实静态类型在一定程度上get应用较多,set较少。

  • 相关阅读:
    移动网络介绍
    统一导航路由方案
    负载均衡汇总
    Openfire部署和配置说明
    CDN技术介绍
    流媒体
    WebSocket和HTTP的区别与联系
    zabbix 邮件报警
    Linux系统故障-Repair filesystem
    redhat 6.8 配置yum源
  • 原文地址:https://www.cnblogs.com/polly333/p/4498395.html
Copyright © 2020-2023  润新知