本文介绍了10种最常见的编程错误,或是C#程序员要避免的陷阱。
常见错误1: 像使用值一样使用参考或过来用
C++以及许多其他语言的程序员习惯于控制他们分配给变量的值是否为简易的值或现有对象的引用。在C#中呢,这将由写该对象的程序员决定,而不是由实例化该对象并对它进行变量赋值的程序员决定。这是新手C#程序员们的共同“问题”。
如果你不知道你正在使用的对象是否是值类型或引用类型,你可能会遇到一些惊喜。例如:
?
- Point point1 = new Point(20, 30); Point point2 = point1;
- point2.X = 50; Console.WriteLine(point1.X); // 20 (does this surprise you?)
- Console.WriteLine(point2.X); // 50
- Pen pen1 = new Pen(Color.Black); Pen pen2 = pen1;
- pen2.Color = Color.Blue; Console.WriteLine(pen1.Color); // Blue (or does this surprise you?)
- Console.WriteLine(pen2.Color); // Blue
如你所见,尽管Point和Pen对象的创建方式相同,但是当一个新的X的坐标值被分配到point2时, point1的值保持不变 。而当一个新的color值被分配到pen2,pen1也随之改变。因此,我们可以推断point1和point2每个都包含自己的Point对象的副本,而pen1和pen2引用了同一个Pen对象 。如果没有这个测试,我们怎么能够知道这个原理?
一种办法是去看一下对象是如何定义的(在Visual Studio中,你可以把光标放在对象的名字上,并按下F12键)
?
- public struct Point { … } // defines a “value” type public class Pen { … } // defines a “reference” type
如上所示,在C#中,struct关键字是用来定义一个值类型,而class关键字是用来定义引用类型的。 对于那些有C++编程背景人来说,如果被C++和C#之间某些类似的关键字搞混,可能会对以上这种行为感到很吃惊。










