关于C++与C#的部分区别 C#静态构造函数

来自 《剑指offer  名企面试官精讲典型编程题》


问:C++中struct和class的区别?

答:如果没有标明成员函数或者成员变量的访问权限级别,在struct中默认为public,而在class中默认为private

问:那在C#中呢?

答:C#和C++不一样,在C#中如果没有标明成员函数和成员变量的访问权限级别,struct和class都是private的。

他们的区别在于,struct定义的是值类型,值类型的实例在栈上分配内存,而class定义的是引用类型,引用类型的实例在堆上分配内存。


C#中可以为类型定义一个特殊的构造函数:静态构造函数。这个函数的特点是在类型第一次被使用之前由运行时自动调用,而且保证只调用一次。


运行下面的C#代码,输入的结果是什么?

class A
{
	public A(string text)
	{
		Console.WriteLine(text);
	}
}
class B
{
	static A a1 = new A("a1");
	A a2 = new A("a2");

	static B()
	{
		a1 = new A("a3");
	}
	
	public B()
	{
		a2 = new A("a4");
	}
}	
class Program
{
	static void Main(string[] args)
	{
		B b = new B();
	}
}

在调用类型B的代码之前先执行B的静态构造函数。静态构造函数先初始化类型的静态变量,再执行函数体内的语句。因此先打印a1再打印a3.

接下来执行B b new B(),即调用B的普通构造函数。构造函数先初始化成员变量,再执行函数体内的语句,因此先后打印出a2,a4.

则最后结果为a1,a3,a2,a4.








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值