zoukankan      html  css  js  c++  java
  • 静态和非静态

    一、引言

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

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

    • 1、静态类和非静态类

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

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

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

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

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

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

  • 相关阅读:
    【解决】Git failed with a fatal error. Authentication failed for ‘http://......’
    利用BenchmarkDotNet 测试 .Net Core API 同步和异步方法性能
    mysql通过event和存储过程实时更新简单Demo
    执行命令npm install XXX后仍然提示 Cannot find Module XXX
    c#调用微信接口获取token值
    同一对象多条数据同时插入数据库
    常用的正则表达式(持续更新。。)
    【半转贴】解决SQL SERVER 2008数据库表中修改字段后不能保存
    asp.net中的服务器控件button的属性
    关于在asp.net中textbox文本输入框中的汉语标点符号显示位置的问题
  • 原文地址:https://www.cnblogs.com/polly333/p/4498395.html
Copyright © 2011-2022 走看看