静态构造函数是在构造函数方法前面添加了static关键字之后形成的,并且没有修饰符(public,private),没有参数。

特点:
1、静态构造函数没有修饰符修饰(public,private),因为静态构造函数不是我们程序员调用的,是由.net 框架在合适的时机调用的。
2、静态构造函数没有参数,因为框架不可能知道我们需要在函数中添加什么参数,所以规定不能使用参数。
3、静态构造函数前面必须是static 关键字。如果不加这个关键字,那就是普通的构造函数了。
4、静态构造函数中不能实例化实例变量。(变量可以分为类级别和实例级别的变量,其中类级别的有static关键字修饰)。
5、静态函数的调用时机,是在类被实例化或者静态成员被调用的时候进行调用,并且是由.net框架来调用静态构造函数来初始化静态成员变量。
6、一个类中只能有一个静态构造函数。
7、无参数的静态构造函数和无参数的构造函数是可以并存的。因为他们一个属于类级别,一个属于实例级别,并不冲突。
8、静态构造函数只会被执行一次。并且是在特点5中的调用时机中进行调用。
9、如果没有在类中写构造函数,那么框架会为我们生成一个构造函数,那么如果我们在类中定义了静态变量,但是又没有定义静态构造函数,那么框架也会帮助我们来生成一个静态构造函数来让框架自身来调用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApp1
{
class A
{
static A()
{
Console.WriteLine("1");
}
public A()
{
Console.WriteLine("2"); }
}
class B:A
{
static B()
{
Console.WriteLine("a");
}
public B()
{
Console.WriteLine("b"); }
}
class Program
{
static void Main(string[] args)
{
//a 1 2 b
A ab = new B();
Console.WriteLine("--------");
//2 b
ab = new B();
Console.ReadKey();
}
}
}

执行结果:

1、A ab = new B();

A. 实例化B, 执行B的静态构造函数 == 输出`a`

B. 执行B的构造函数,因为B继承自A,所以先进入A

C. 实例化A, 执行A的静态构造函数,== 输出 `1`

D. 执行A的构造函数 ==输出`2`

E. 最后回到B的构造函数 == 输出`b`

2、ab = new B();

因为静态构造函数只创建一次,所以不会进入静态构造函数

A. 因为B继承自A,所以先进入A的构造函数 == 输出`2`

B. 再进入B的构造函数 == 输出`b`


原文链接:https://blog.csdn.net/hyunbar/article/details/81171335

最新文章

  1. java线程同步 以及wait 和notify用法
  2. webstorm总结
  3. HDU(3555),数位DP
  4. iOS开发之通知使用总结
  5. 有关获取session属性时报nullPointException(空指针异常)的解决方案
  6. CentOS中操作Psql
  7. 程序员谈学习:我为什么要学习Linux?
  8. [jobdu]栈的压入、弹出序列
  9. 基于zabbix 内置key的应用
  10. delphi TFontDialog
  11. .net程序员必须知道的知识
  12. 二维指针*(void **)的研究(uC/OS-II案例) 《转载》
  13. OpenMp 基本
  14. Power Designer Repository 使用指南(一)
  15. vim中常用基本命令
  16. JAVA8集合之List
  17. redis虚拟内存
  18. jquery banner 轮播配置方法
  19. c# 多线程之-- System.Threading Timer的使用
  20. 初识Tomcat

热门文章

  1. kafka安装流程
  2. SYSTEM_SHMCONSTR_LOGON_FAILED错误解决办法
  3. PAT Advanced 1007 Maximum Subsequence Sum
  4. CUDA 介绍
  5. 解决window10 和 ubuntu 双系统安装没有启动选项问题
  6. Win+R 快速启动程序
  7. go 语言开发中 GOPATH问题 与 go语言linux 开发环境 教程
  8. tcpdump 参数详解及使用案例
  9. LDAP学习
  10. WPF Selector、SelectIndex、SelectedValue、SelectedValuePath、SelectedItem这几兄弟你分的清楚嘛?