在面向对象的C#程序设计中,关于静态的概念一直是很多人搞不明白的。下面介绍这些带“静态”的名称。

1.静态成员:

   定义:静态成员是用static关键字修饰的成员(包括字段属性和方法)

   所属:静态成员是属于类的,只能通过类名.对象名的形式访问,而不能通过对象名访问

   存储:静态成员是存储在内存空间的静态存储区中,而不是存储在栈或者堆中

   生存周期:静态成员的生存周期是从类第一次被加载到整个程序运行结束才被释放,和垃圾回收器GC没有关系

   何时使用:当这个类中的某些属性要被共享,某些方法要被反复调用,这个时候才将这些成员设置为静态,只需要加载一次

    //类加载:什么是类加载,这个概念和java中的类加载时一样的。类的代码存放在代码段中,只要类被访问一次就会加载一次,我的理解是只要程序中出现了类名 类就被加载一次,类一旦被加载,那些静态成员立即被加载到静态存储区中。

    

2.实例成员

   相比于静态成员。实例成员就是静态成员的反面,

    1.实例成员没有static关键字修饰,是属于对象的,在对象创建的时候才被创建

    2.实例成员只能通过对象名来访问,因为他属于对象,对象有多少分,他就有创建多少份

    3.实例成员是存放在堆内存中的(成员变量存放在堆中,而方法的局部变量就定义在栈中)

    4.实例成员的生命周期是从对象被创建(new)到对象失去引用,被垃圾回收器回收

3.静态类

    定义:被static关键字修饰的类就是静态类

    说明:

      1.静态类中只能定义静态的成员,不能定义实例的成员。至于为什么:通过查看static的IL代码,他是一个抽象类和密封类,抽象类是不能被实例化的,他只是众多类的一个抽象,是堆类的共同点的归纳,实例化没有意义

      2.静态类不能被继承,因为他是一个密封类(abstract),密封类是无法被继承的,但是静态的类可以继承别的类

      3.静态类中的所有成员都只能通过类名.成员名访问

    何时定义:当类中所有成员属性都要被共享,所有方法都要被反复调用,这个时候不如将类设置为静态类,类的一切都存储在静态存储区中,这样就能提高开发效率

实例类

    相比于静态类,就有了实例类

    定义:实例类就是没有static关键字修饰的类

    说明:实例类就是我们一般见到的类

      1.实例类中所有的实例成员是存储在堆中的,从对象被创建(new)到对象失去引用被垃圾回收器回收为止

      2.实例类可以被继承也可以继承其他类,当然也可以实例出一个对象。这个自然不用说

      3.实例类中可以定义静态成员 和静态构造方法,但是在静态类中不能定义实例成员和实例构造方法

介绍完静态类和实例类,静态成员和实例成员的区别,接着讲一下静态构造方法和实例构造方法

  静态构造方法:

    1.静态构造方法:就是被static关键字修饰的构造方法(构造方法名和类名相同)

    2.说明:静态构造方法是一个“三无产品”:即:无参数 无返回值 无重载

        只要是构造方法本来就没有返回值,而静态构造方法没有没有参数,没有参数自然就没有重载,静态构造方法是被系统自动调用         的,不需要手动调用,因此就不需要手动选择重载。

    3.调用时机:静态构造方法和其他静态成员一样,都是在第一次类加载就被加载到静态存储区的。但是静态构造方被自动的调用时机就     是在该类的成员第一次被访问之前。

    4.什么是成员第一次被访问:这个问题曾经困扰我多时,经过查找资料,反复试验现在终于可以确定下来,类的成员第一次被加载分为方法和静态属性的第一     次被访问。至于方法第一次访问,就是在创建对象,实例构造函数被调用。这叫成员第一次被调用,至于静态属性,不是说类加载的时候为这个成员开辟空     间的同时赋初始值叫静态成员的访问,类加载的时候为成员赋初始值不叫成员访问。成员访问时在其他地方通过类名.静态成员名 访问才叫访问。在第一次     访问实例构造方法和第一次访问静态属性之前,静态构造方法才能被调用!

    5.其他:当然静态构造方法也属于静态成员,自然符合静态成员的一些特性,比如他也不属于对象,属于类,存储在静态存储区中,从类第一次被加载从程序       完全退出,一直存在

实例构造方法

  1.实例构造方法:就是我们常见的构造方法

  2.说明:实例构造方法在对象中是默认存在的,如果程序员没有手动定义实例构造方法,那么编译器会自动帮我们生产一个无参数的并且为空方法体的方法构造方法,当然方法名和类名一样,这点可以在通过反编译查看,如果程序员手动创建了一个构造方法,那么编译器就不再为我们创建默认的构造方法

  3.实例构造方法的一些特性:实例构造方法是没有返回值的,甚至连void都不用写,一般的实例构造方法必须为public,最少也要protected和internal否则根本无法创建对象。

  4.实例构造方法之间的调用:实例构造方法不能被普通的方法调用,更不能被静态方法调用(静态方法不能调用实例成员,因为当静态方法存在的时候,实例成员还不一定存在),但是实例构造方法可以互相调用,通过 :this()方式调用

  

class Person()
{
public string Name{set;get;}
public int Age{set;get;}
public bool Gender{set;get;};

//通过this关键字调用其他的构造方法重载
public Peson():this(int age)
{
cw("我是构造方法1");
} public Peson(int age)
{
cw("我是构造方法2" + age);
}
}

  

DotNet中静态成员、静态类、静态构造方法和实例构造方法的区别与联系的更多相关文章

  1. 解析Java中静态变量与实例变量的区别

    java类的成员变量有俩种:一种是被static关键字修饰的变量,叫类变量或者静态变量:另一种没有static修饰,为实例变量.      在语法定义上的区别:静态变量前要加static关键字,而实例 ...

  2. Java笔记_静态变量和实例变量的区别

    这里简单做一下笔记,区分Java全局变量里的静态变量与实例变量. 1.Java里的全局变量 首先了解Java里的全局变量,也叫成员变量. 特点: (1).一个类中既不在方法体内,也不在程序块内定义的变 ...

  3. Java中静态变量和实例变量的区别

    静态变量属于类的级别,而实例变量属于对象的级别. 主要区别有两点: 1,存放位置不同 类变量随着类的加载存在于方法区中,实例变量随着对象的对象的建立存在于堆内存中. 2,生命周期不同 类变量的生命周期 ...

  4. 【Java面试题】4 静态变量和实例变量的区别?详细解析

    在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加.在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量.静态变 ...

  5. Django 中 app_name (应用命名空间) 和 namespace (实例命名空间) 的区别

    转自:https://www.jianshu.com/p/404500a0408a 补充理解: 先把官网上对应用命名空间(app_name)和实例命名空间(namespace)的解释贴上: app_n ...

  6. Java中静态变量与实例变量

    知识回顾 上一篇总结了java中成员变量和局部变量的区别,这一篇将总结静态变量和实例变量的一些特性和区别. 示例代码 package Variable; public class VariableDe ...

  7. 关于java中构造方法、实例初始化、静态初始化执行顺序

    在Java笔试中,构造方法.实例初始化.静态初始化执行顺序,是一个经常被考察的知识点. 像下面的这道题(刚刚刷题做到,虽然做对了,但是还是想整理一下) 运行下面的代码,输出的结果是... class ...

  8. C#扫盲之:静态成员、静态方法、静态类、实例成员及区别

    文章目录 1.静态成员.实例成员 2.静态类 3.类的静态成员和非静态成员区别 --------------------------------------分割线------------------- ...

  9. 【转载】C#扫盲之:静态成员、静态方法、静态类、实例成员及区别

    文章目录 1.静态成员.实例成员 2.静态类 3.类的静态成员和非静态成员区别 --------------------------------------分割线------------------- ...

随机推荐

  1. Thymeleaf th:include,th:replace使用

    来自:https://blog.csdn.net/believe__sss/article/details/79992408

  2. 5.springboot-------Yaml

    springboot配置文件: Yaml是什么玩意? Yaml的基本语法 编写规则 1.大小写敏感,同json: 2.通过缩进表示层级关系:符号含义 注意事项:字符串默认不需要加上单引号或双引号. # ...

  3. 题解【洛谷P2615】[NOIP2015]神奇的幻方

    题目描述 幻方是一种很神奇的 \(N \times N\) 矩阵:它由数字 \(1,2,3,\cdots \cdots ,N \times N\) 构成,且每行.每列及两条对角线上的数字之和都相同. ...

  4. Linux jpeglib库的安装

    tar -zxvf jpegsrc.v9.tar.gz cd jpeg9 ./configure --enable-shared  --enable-static 分别对动态链接库和静态链接库的支持 ...

  5. Web前端性能优化总结——如何提高网页加载速度

    一.提高网页加载速度的必要性 国际知名的一组来自Jupiter Research的数据显示:购物者在访问网站过程中的不满会导致销售损失和品牌受损,其中 77%的人将不再访问网站 ,62%的人不再从该网 ...

  6. maven 配置 阿里云仓库

    随便记录下,以后方便查询 <mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> < ...

  7. 数据库程序接口——JDBC——功能第四篇——事务之Spring事务

    综述 事务的实现方式有三种,JTA,Spring事务,Web Container方式.本篇讲述Spring事务. Spring事务分为两个部分核心对象,Spring事务的实现方式. Spring事务实 ...

  8. Go流程结构(for)

    一.程序的流程结构 程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构. 顺序结构:代码从上向下逐行的执行 选择结构:条件满足,某些代码才会被执行.0-1次 if语句,switch语句 循环结 ...

  9. 忽视自身问题并“积极甩锅”,新氧CEO金星还要脸吗?

    编辑 | 于斌 出品 | 于见(mpyujian) "互联网医美第一股"新氧果然还是爆雷了. 说"果然"是因为于见曾经针对新氧目前的商业模式进行过分析,认为以新 ...

  10. 论STA | POCV/SOCV 对lib 的要求 (4)

    在芯片制造过程中的工艺偏差由global variation 和local variation 两部分组成. 在集成电路设计实现中,global variation 用PVT 跟 RC-corner ...