• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#中静态构造函数的几点说明介绍

C#中静态构造函数的几点说明介绍

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c#静态构造函数,c#中静态构造函数,c#中静态函数,c#静态函数,c#函数静态变量等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。

1、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。

2、是在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。

3、一个类只能有一个静态构造函数。

4、无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。

5、最多只运行一次。

6、静态构造函数不可以被继承。

7、如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。
 

静态构造函数趣谈!
类的静态构造函数也叫类型构造器,静态构造器,他调用的时刻由CLR来控制:

CLR会选择如下时间之一来调用静态构造函数:
 1,在类型的第一个实例创建之前,或类型的非继承字段或成员第一次访问之前。这里的“之前”,代表前后衔接的意思。这里的时刻是精确的!

 2,在非继承的静态字段或成员第一次访问之前的某个时刻,具体时刻不定!

由于调用的时刻不确定,所以我们最好不要编写依赖于特定的静态构造函数的执行顺序的代码,这样很容易产生不可预料的后果!

下面大家看看以下的Demo,我们来更加深入的看看静态构造函数的一些有趣的行为:

Demo1:

下面看看第二个Demo:

Demo2:

Console.WriteLine(B.strText); 

}
public class A
{
public static string strText;
static A()
{
strText = "aaaa";  
}
}
public class B : A
{
static B()
{
strText = "bbbb";  
}
}
</div>
大家猜猜输出结果是什么,可能有人认为会输出aaaa,理由是new B()之前会调用static B(),然后new A()之前需要调用static A,这样结果是aaaa,但是实际情况并非如果,正确的结果是bbbb,原因如下:

在执行  new B(); 之前,B类的静态构造函数会调用,也就是会调用:
static B()
{
 strText="bbbb";
}

当执行到strText=“bbbb"的时候,这时需要访问strText字段,而B的strText字段是从A类继承的,所以这里需要会先调用:
static A()
{
 strText="aaaa";
}

执行这个函数以后strText的值是aaaa

然后代码又回到static B()中,这时才执行static B()中的strText="bbbb"这行,所以strText这时的值是bbbb

当执行A a=new A();的时候,不会在调用A的静态构造函数了,因为前面已经调用过了,静态函数在整个应用程序域的生命周期中只会调用一次!

请大家多指教啊!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#小知识之有趣的类型静态构造器
  • C#生成单页静态页简单实例
  • C#中私有构造函数的特点和用途实例解析
  • C#中静态构造函数的几点说明介绍
  • C# 静态构造函数使用总结
  • c# 引用类型构造器

相关文章

  • 2017-05-28C# 中文简体转繁体实现代码
  • 2017-05-28C#接口实现方法实例分析
  • 2017-05-28C#的path.GetFullPath 获取上级目录实现方法
  • 2017-05-28C#队列Queue多线程用法实例
  • 2017-05-28C#无损压缩图片
  • 2017-05-28在.net应用程序中运行其它EXE文件的方法
  • 2017-05-28winform模拟鼠标按键的具体实现
  • 2017-05-28C#求数组中元素全排列的方法
  • 2017-05-28C#基础知识之FileStream
  • 2017-05-28C#实现控制线程池最大数并发线程

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 时间字符串转换成日期对象datetime的方法
    • C#难点逐个击破(7):checked与unchecked
    • C#使用Object类实现栈的方法详解
    • C# 计算标准偏差相当于Excel中的STDEV函数实例
    • C#微信开发之微信公众号标签管理功能
    • C# IP地址与整数之间转换的具体方法
    • C#程序员最易犯的编程错误
    • C#四舍五入(函数)用法实例
    • C#实现无限级联下拉列表框
    • C#关于类的只读只写属性实例分析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有