C#工程师容易犯的错误

C#工程师容易犯的错误

ID:42561827

大小:2.13 MB

页数:18页

时间:2019-09-17

C#工程师容易犯的错误_第1页
C#工程师容易犯的错误_第2页
C#工程师容易犯的错误_第3页
C#工程师容易犯的错误_第4页
C#工程师容易犯的错误_第5页
资源描述:

《C#工程师容易犯的错误》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C#程序员最常犯的10个错误程序员   2014-05-1211:51:41发布您的评价:     4.0收藏     0收藏关于C#C#是达成微软公共语言运行库(CLR)的少数语言中的一种。达成CLR的语言可以受益于其带来的特性,如跨语言集成、异常处理、安全性增强、部件组合的简易模型以及调试和分析服务。作为现代的CLR语言,C#是应用最为广泛的,其应用场景针对Windows桌面、移动手机以及服务器环境等复杂、专业的开发项目。C#是种面向对象的强类型语言。C#在编译和运行时都有的强类型检查,使在大多数典型

2、的编程错误能够被尽早地发现,而且位置定位相当精准。相比于那些不拘泥类型,在违规操作很久后才报出可追踪到莫名其妙错误的语言,这可以为程序员节省很多时间。然而,许多程序员有意或无意地抛弃了这个检测的有点,这导致本文中讨论的一些问题。关于本文本文描述了10个C#程序员常犯的错误,或应该避免的陷阱。尽管本文讨论的大多数错误是针对C#的,有些错误与其他以CLR为目标的语言,或者用到了 FrameworkClassLibrary (FCL)的语言也相关。常见错误#1:把引用当做值来用,或者反过来C++和其他很多语言的

3、程序员,习惯了给变量赋值的时候,要么赋单纯的值,要么是现有对象的引用。然而,在C#中,是值还是引用,是由写这个对象的程序员决定的,而不是实例化对象并赋值的程序员决定的。这往往会坑到C#的新手程序员。如果你不知道你正在使用的对象是否是值类型或引用类型,你可能会遇到一些惊喜。例如:  Point point1 = new Point(20, 30);  Point point2 = point1;  point2.X = 50;  Console.WriteLine(point1.X);       // 2

4、0 (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); 

5、    // Blue如你所见,尽管Point和Pen对象的创建方式相同,但是当一个新的X的坐标值被分配到point2时, point1的值保持不变 。而当一个新的color值被分配到pen2,pen1也随之改变。因此,我们可以推断point1和point2每个都包含自己的Point对象的副本,而pen1和pen2引用了同一个Pen对象 。如果没有这个测试,我们怎么能够知道这个原理?一种办法是去看一下对象是如何定义的(在VisualStudio中,你可以把光标放在对象的名字上,并按下F12键)  publ

6、ic struct Point { … }     // defines a “value” type  public class Pen { … }        // defines a “reference” type如上所示,在C#中,struct关键字是用来定义一个值类型,而class关键字是用来定义引用类型的。 对于那些有C++编程背景人来说,如果被C++和C#之间某些类似的关键字搞混,可能会对以上这种行为感到很吃惊。如果你想要依赖的行为会因值类型和引用类型而异,举例来说,如果你想把一个对象作

7、为参数传给一个方法,并在这个方法中修改这个对象的状态。你一定要确保你在处理正确的类型对象。常见的错误#2:误会未初始化变量的默认值在C#中,值得类型不能为空。根据定义,值的类型值,甚至初始化变量的值类型必须有一个值。这就是所谓的该类型的默认值。这通常会导致以下,意想不到的结果时,检查一个变量是否未初始化:  class Program {      static Point point1;      static Pen pen1;      static void Main(string[] args)

8、 {          Console.WriteLine(pen1 == null);      // True          Console.WriteLine(point1 == null);    // False (huh?)      }  }为什么不是【point1】空?答案是,点是一个值类型,和默认值点(0,0)一样,没有空值。未能认识到这是一个非常简单和常见的错误,在C#中很多(但是不是全部)值类型有一个

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。