● 静态构造函数只能对静态成员初始化,不能对非静态成员进行初始化操作,然而实例构造函数,既可以初始化实例成员也可以初始化静态成员,但静态只读字段除外

  ● 静态构造函数只被执行一次,但是CLR也不能确定它什么时候被执行,它的执行方式有两种,precise和before-field-init,这个会在下一篇文章中详细给大家介绍,这里先提出给大家一个思考的空间。而实例构造函数在每次创建对象实例时都会被执行,创建几个会执行几次

  ● 一个类只能有一个静态构造函数,却可以有多个实例构造函数

  静态字段的初始值在静态构造函数调用之前被指定,构造函数的执行顺序大致如下图所示:

  3.3 静态字段、属性和实例字段、属性

  下面直接总结下它们之间的区别:

  ● 静态成员包括静态字段和静态字段,静态字段一般实现为private,静态属性一般实现为public,从而来体现类的封装性

  ● 静态成员和类相关联,不依赖于对象而存在,只能由类来访问;实例成员与具体类相关联,只能由对象实例访问

  ● 静态成员不管创建多少实例对象,都在内存中只有一份,实例成员每创建一个实例对象,都会在内存中分配一块内存区域。

  3.4 静态方法与实例方法

  类似于静态字段和属性,静态方法共享代码段,同样以static关键字来标识静态方法,对于他们之间的区别总结为:

  ● 静态方法只能访问静态成员和方法,但是可以间接通过创建实例对象来访问实例字段、属性和方法;实例方法既可以访问实例成员也可以访问静态成员

  ● 静态方法由类方法‘实例方法由对象访问

  ● 静态方法不能引用this关键字,而实例方法可以

  ● 静态方法不能被标识为virtual、abstract或override,静态方法可以被派生访问,但是不能被派生类重写

  ● Main方法为静态的,所以Main方法不能直接访问类中的实例字段、属性和方法,否则编译器会报错

  ● 静态方法一般用于作为通用的工具类来实现

  ● 在性能上,静态方法和实例方法的差别不大。因为,它们都是在JIT加载类的时候分配内存的,不同的是静态方法是以类为引用,而实例方法是以对象为引用,创建实例时,不会再为静态方法分配内存,所有实例对象共用一个类的方法代码,所以,静态方法和实例方法的调用,区别仅在于静态方法可以直接调用,而实例方法需要当前对象指针指向该方法,在性能上差不并不大。

  四、小结

  到这里,本文章的内容介绍完了,通过对静态特征和非静态特征的由来来揭开一些都是源于生活的观点,然后再详细分析了静态特征与非静态特征在C#语言中的区别,希望这些总结可以帮助大家在复习基础知识的时候可以有用。同时也是自己的一个复习笔记的。