关于C++与C#的部分区别 C#静态构造函数
2012-11-17 10:08
274 查看
来自 《剑指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.
问: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.
相关文章推荐
- C++内存管理(可以参考C++与C#区别文章的后面部分)
- 关于for循环体里变量的声明的使用在c++、c#里的区别
- C#与C++的区别(部分总结)
- 关于C#和C++的重载(Overload)、隐藏(Hide)、覆盖(Override)几个区别比较和得出的疑问
- c++和c#关于对象赋值的一个重要差别
- 关于在C#中调用C++ DLL 时的参数传递
- C#与C++的区别
- C++中关于[]静态数组和new分配的动态数组的区别分析
- java.c++.c#.c的区别
- c++和c#中数组的区别
- C++中关于[]静态数组和new分配的动态数组的区别分析
- 关于 c#调用c++ 出现异常System.StackOverflowException 的问题
- C#和C++语法区别
- .net,c#,c++,vc.net ,vc 诸多名词的区别与联系
- 关于c#中的消息处理函数和vc中的消息处理函数区别
- 关于在c#里加载c++ dll的一些注意事项
- c#与c++区别(一)
- C/C++与C#区别(2)
- (英文)关于Unity3d c#和.a\.o\.so等native库文件的交互,库文件可以由c\c++\object-c等编译
- java 与 c++ 、 C# 之间的区别与联系