C++编程人员容易犯的10个C#错误

2004-02-14 09:34  出处:中国计算机报  作者:刘彦青  责任编辑:ycx 

在本例的第一部分中,Font对象是在Using语句中创建的。当Using语句结束时,系统就会调用Dispose,对Font对象进行处理。在本例的第二部分,Font对象是在Using语句外部创建的,在决定使用它时,再将它放在Using语句内,当Using语句结束时,系统就会调用Dispose。 Using语句还能防止其他意外的发生,保证系统一定会调用Dispose。 错误3:C#中的值型变量和引用型变量是有区别的 与C++一样,C#也是一种强类型编程语言。C#中的数据类型被分为了二大类:C#语言本身所固有的数据类型和用户自定义数据类型,这一点也与C++相似。 此外,C#语言还把变量分为值类型和引用类型。除非是被包含在一个引用类型中,值类型变量的值保留在栈中,这一点与C++中的变量非常相似。引用类型的变量也是栈的一种,它的值是堆中对象的地址,与C++中的指针非常地相似。值类型变量的值被直接传递给方法,引用型变量在被作为参数传递给方法时,传递的是索引。 类和界面可以创建引用类变量,但需要指出的是,结构数据类型是C#的一种内置数据类型,同时也是一种值型的数据类型。 错误4:注意隐性的数据类型转换 Boxing和unboxing是使值型数据类型被当作索引型数据类型使用的二个过程。值型变量可以被包装进一个对象中,然后再被解包回值型变量。包括内置数据类型在内的所有C#中的数据类型都可以被隐性地转化为一个对象。包装一个值型变量就会生成一个对象的实例,然后将变量拷贝到实例中。 Boxing是隐性的,如果在需要索引型数据类型的地方使用了值型数据类型的变量,值型变量就会隐性地转化为索引型数据类型的变量。Boxing会影响代码执行的性能,因此应当尽量避免,尤其是在数据量较大的时候。 如果要将一个打包的对象转换回原来的值型变量,必须显性地对它进行解包。解包需要二个步骤:首先对对象实例进行检查,确保它们是由值型的变量被包装成的;第二步将实例中的值拷贝到值型变量中。为了确保解包成功,被解包的对象必须是通过打包一个值型变量的值生成的对象的索引。 using System; public class UnboxingTest { public static void Main() { int i = 123; //打包 object o = i; // 解包(必须是显性的) int j = (int) o; Console.WriteLine("j: {0}", j); } }
键盘也能翻页,试试“← →”键
相关文章

相关软件:

腾讯QQ2012
大小:52.93 MB 授权:免费
腾讯QQ2012
立即下载
腾讯QQ2013
大小:49.32 MB 授权:免费
腾讯QQ2013
立即下载