来自 《剑指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.