【C#基础知识】静态构造函数,来源于一道面试题的理解
看到园友的一道面试题,很好奇,测试了一下结果。
public class A
{
public static int X=B.Y ;
public A()
{ ++X;
}
}
public class B
{
public static int Y = A.X ;
static B()
{
++Y;
}
}
static void Main(string[] args)
{ Console.WriteLine(A.X.ToString());
Console.WriteLine("B.Y");
Console.WriteLine(B.Y.ToString());
Console.Read();
}
答案是:1 1
开始一直想不通,最后明白了,这道题考查的就是静态构造函数。
静态构造函数:静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。
当打印A.X.ToString()的时候:
static int X = B.Y ,X由于是全局变量,默认值还是0;
执行B.Y ,因为Y是全局静态成员,因为调用的是静态成员就会执行静态构造函数++Y,这时Y就是1了;
再赋值给X,由于X没有静态构造函数,又没有实例化是不会执行构造函数A的,所以打印结果X为1。 当打印B.Y.toString()的时候:
static int Y = A.X,会查找到A的X,再执行一次上面的操作,但是由于静态构造函数只会执行一次,虽然调用了B的静态成员,但是static构造函数中++Y就不会在执行了,X是1就会赋值给Y,所以Y打印结果也是1; 构造函数注意:
1、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。 2、是在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。 3、一个类只能有一个静态构造函数。 4、无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。 5、最多只运行一次。 6、静态构造函数不可以被继承。 7、如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。
答案是这样解的吗?求指教,求讲解!!!
【C#基础知识】静态构造函数,来源于一道面试题的理解的更多相关文章
- Java中有关构造函数的一道笔试题解析
Java中有关构造函数的一道笔试题解析 1.详细题目例如以下 下列说法正确的有() A. class中的constructor不可省略 B. constructor必须与class同名,但方法不能与c ...
- 20151024_001_C#基础知识(静态与非静态的区别,值类型和引用类型,堆和栈的区别,字符串的不可变性,命名空间)
1:我们把这些具有相同属性和相同方法的对象进行进一步的封装,抽象出来类这个概念. 类就是个模子,确定了对象应该具有的属性和方法. 对象是根据类创建出来的. 2:类:语法 [public] class ...
- Android(java)学习笔记188:关于构造代码块,构造函数的一道面试题(华为面试题)
1.源码是: package text; public class TestStaticCon { public static int a = 0; static { a = 10; System.o ...
- Android(java)学习笔记131:关于构造代码块,构造函数的一道面试题(华为面试题)
1. 代码实例: package text; public class TestStaticCon { public static int a = 0; static { a = 10; System ...
- 图像处理基础知识:EMVA1288标准之“非均匀性”的理解
EMVA1288标准之“非均匀性”的理解 目录 1. 什么是图像的非均匀性?有标准吗? 2. EMVA1288的非均匀性内容. 3. 总结与理解 正文 1. 什么是图像的非均匀性?有标准吗?简单来说, ...
- C++之基础知识20170830
/*************************************************************************************************** ...
- .NET面试题系列[3] - C# 基础知识(1)
1 类型基础 面试出现频率:基本上肯定出现 重要程度:10/10,身家性命般重要.通常这也是各种招聘工作的第一个要求,即“熟悉C#”的一部分.连这部分都不清楚的人,可以说根本不知道自己每天都在干什么. ...
- C#基础知识一之base关键字
前言 其实很早就想写关于C#基础,总是自己给自己找借口,或者去网上搜搜看看,现在想想觉得自己有点懒惰... 作为开发人员,基础知识是重中之重的,只有巩固.理解.实践才能提高自身的技能.同时也希望通过 ...
- CSS基础知识之float
前段时间写过一篇CSS基础知识之position,当时对float的理解不太准确,被慕课网多名读者指出(原文已修正,如有误导实在抱歉).现对float进行更深入的学习,在此把学习心得分享给大家. 浮动 ...
随机推荐
- Java高效编程(2) -- Creating and Destroying Objects
Item 1: Consider static factory methods instead of constructors Advantage: One advantage of static f ...
- timesten备份和恢复
ttIsql "DSN=ttwind;UID=cacheuser;PWD=cacheuser;OraclePWD=cacheuser;" --1.查看当前版本号 Command&g ...
- 【百度地图API】发布静态图API啦!只需一个网址,即可展示定制百度地图!
原文:[百度地图API]发布静态图API啦!只需一个网址,即可展示定制百度地图! 摘要: 百度地图静态图API!您无须执行任何“特殊”操作便可在网页上显示此图片. 不需要 JavaScript.我们只 ...
- BZOJ 3282 Tree Link-Cut-Tree(LCT)
题目大意: 给定N个点以及每一个点的权值,要你处理接下来的M个操作.操作有4种.操作从0到3编号.点从1到N编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor和.保证x到y ...
- vistual studio 2012 安装失败,提示Microsoft Vistual Studio 2012 Devenv找不到元素,等错误信息
在安装vistual studio 2012过程中,出现安装失败,提示Microsoft Vistual Studio 2012 Devenv找不到元素,等错误信息 解决方法是更新相应的server补 ...
- MS SQL Server递归查询
原文:MS SQL Server递归查询 刚才在论坛上看到网友一个要求.参考如下,Insus.NET分析一下,可以使用MS SQL Server的递归查询,得到结果.准备一张表: 根据网友提供的数据, ...
- C语言库函数大全及应用实例二
原文:C语言库函数大全及应用实例二 [编程资料]C语言库函数大全及应用实例二 函数名: bioskey 功 能 ...
- Humming Bird A20 SPI2驱动编译
Humming Bird A20 SPI2使用编译 Yao.GUET 2014-07-17,请注明出处:http://blog.csdn.net/Yao_GUET A20上带有4个spi接口,因为Hu ...
- java ResultSet 结果集处理 createStatement() 里参数的意义(第一弹)
createStatement(int resultSetType,int resultSetConcurrency)参数一:结果集类型可取值: 1.ResultSet.TYPE_FORWOR ...
- DDD分层架构之值对象(层超类型篇)
DDD分层架构之值对象(层超类型篇) 上一篇介绍了值对象的基本概念,得到了一些朋友的支持,另外也有一些朋友提出了不同意见.这其实是很自然的事情,设计本来就充满了各种可能性,没有绝对正确的做法,只有更好 ...