- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C# 程序员最常犯的 10 个错误/lib/tag/%E7%A8%8B%E5%BA%8F%E5%91%98程序员?2014-05-12 11:51:41 发布您的评价:?4.0javascript:void(0)收藏?0收藏关于C#C#是达成微软公共语言运行库(CLR)的少数语言中的一种。达成CLR的语言可以受益于其带来的特性,如跨语言集成、异常处理、安全性增强、部件组合的简易模型以及调试和分析服务。作为现代的CLR语言,C#是应用最为广泛的,其应用场景针对Windows桌面、移动手机以及服务器环境等复杂、专业的开发项目。C#是种面向对象的强类型语言。C#在编译和运行时都有的强类型检查,使在大多数典型的编程错误能够被尽早地发现,而且位置定位相当精准。相比于那些不拘泥类型,在违规操作很久后才报出可追踪到莫名其妙错误的语言,这可以为程序员节省很多时间。然而,许多程序员有意或无意地抛弃了这个检测的有点,这导致本文中讨论的一些问题。关于本文本文描述了10个 C# 程序员常犯的错误,或应该避免的陷阱。尽管本文讨论的大多数错误是针对 C# 的,有些错误与其他以 CLR 为目标的语言,或者用到了?/en-us/library/gg145045%28v=vs.110%29.aspxFramework Class Library?(FCL) 的语言也相关。常见错误 #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#之间某些类似的关键字搞混,可能会对以上这种行为感到很吃惊。如果你想要依赖的行为会因值类型和引用类型而异,举例来说,如果你想把一个对象作为参数传给一个方法,并在这个方法中修改这个对象的状态。你一定要确保你在处理正确的类型对象。常见的错误#2:误会未初始化变量的默认值在C#中,值得类型不能为空。根据定义,值的类型值,甚至初始化变量的值类型必须有一个值。这就是所谓的该类型的默认值。这通常会导致以下,意想不到的结果时,检查一个变量是否未初始化:?class?Program?{?static?Point?point1;??????static?Pen?pen1;??????static?void?Main(string[]?args)?{?Console.WriteLine(pen1?==?null);??????//?True?Console.WriteLine(point1?==?null);????//?False?(huh?)?}?}为什么不是【point 1】空?答案是,点
原创力文档


文档评论(0)