zoukankan      html  css  js  c++  java
  • 天轰穿C# vs2010 03C#的异常处理之编写更高质量的代码[原创]

    天轰穿C# -vs2010 - 03C#的异常处理之编写更高质量的代码
      本章学习线路

           本章由编写更高质量代码的常见规范开始。进一步讲到如何使用VS调试C#应用程序。这两点希望大家一定要用好用熟练。对于很多初学者来说,在一开始就知道代码的运行流程,这对后面的学习是相当有帮助的。接下来就是讲述.net中的异常处理、分别就简单的try/catch,多个catch块进行讲解。接着描述异常处理的系统流程。再后来就是讲解用于清理try语句中占用资源的Finally关键字、和显示抛出异常的Throw关键字。最后是针对用户自定义异常做了一个实例。鉴于自定义异常中涉及类的知识较多,所并未过度深入。
       

        概述

          小天:来帮我看看我这个程序怎么才能更友好点。

    老田:哇,这谁写的代码,怎么一团一团的,完全没有格式啊?你看看,这都什么跟什么啊。整个代码看来和“美”这个词就没有关系。再看看你起的这些变量名称,aaa,bbb,ccc,a1,c2。看来得专门跟你讲下如何编写更易读、更高质量的代码这方便的技巧了。

    小天:哎呀,我做这么多练习已经很不容易了,再说,我们又不是做具体的项目,我哪里知道给变量起什么名字啊。

    快帮我想下,如何让这个程序(2.8小节的实例做数据转换那个WinForm实例)用起来更友好吧。我觉得还有个很大的缺陷。在年龄一栏刻意输入的字符并没有限制。但是在后台处理的代码最终要将这个字符转换为INT类型。这个时候,如果遇到无法转换的字符就会出错了。虽然有时候是故意犯错,但是有什么办法让程序更加友好点,比如给出一个提示,而不是直接报错误呢?毕竟它报出的错误信息也不是谁都看得懂,我想自己定义一个错误信息返回给用户,并且给用户重新输入的机会,而不是让程序直接错误。
     

      编写更高质量的代码

    老田:让程序更加友好,提示错误这个问题我们稍后来讲。我们首先来围绕编写更加易读的C#代码来做一些讨论。为什么会说是更加易读,而不是更高质量呢?因为就我们现在的水平,我们不在乎代码的冗余,只在乎真的把知识点学懂了与否。而一些良好的编码习惯会极大的帮助我们学习、练习以及最终的复习学过的代码。记住,每一个知识点都作出一些实例来,将之妥善保管,这些将来在你上班后会是一笔财富。

    小天:在本章前面讲了注释,我也一直用,我觉得挺好啊,都中文化了,这个已经很易读了。

    老田:注释是一个程序的组成部分。可是我们接下来要说的是整个代码编写中的一些常用规则,比如如何命名、如何申明变量、如何空格等等。

    首先一点是如何然让代码的格式更漂亮点

    一):一行只写一条代码。不要看见代码比较短,就一行写几条语句,比如下面这句,看起来就让人困惑:

                int id = 0; string name = "laotian"; bool degree = false;

          

    二):变量一个个的分行申明,不要再试图在一次申明中就全部都弄完(在本章前面实例中有这样的做法,那是因为要节约书的篇幅,但我们写程序的时候没有必要节约那点位置。),如下:

    //分别是产品ID,总数、和

                int id, count, sum;

                //修改为如下形式就会明了很多

                //产品ID

                int id;

                //总数

                int count;

                //

                int sum;

          

    三):找合适的位置换行。有时候在代码中常常出现一句话很长,这个时候就需要换一行。因为现在的鼠标都有中间的滚轮,所以上下滚动远比拖到屏幕左右移动来得更为方便。如下:

    Console.WriteLine("年利率{0}{1}年后总计{2}元。"

                    , interestRate, years, balance);

           什么情况需要换行呢?一般每行代码或注释在1024*768的显示频率下不得超过一显示屏。如果超过就该考虑换行了。

     

    四)缩进,代码的缩进不仅仅是让代码看起来更加婀娜多姿(扭来摇去)。而是不同的缩进量代表了当前代码所在的层次。例如:

    using System;

    //这里用空行分开,设置我们可以用 #region#endregion把一块一块的代码收缩起来

    namespace MyNamespace

    {

        // 命名空间内的内容应缩进

        public class MyClass

        {

            // 类的成员应缩进

            public string MyMethod()

            {

                // 方法方法的方法体应缩进

                return "Hello!";

            }

     

            private MyEnum myProperty = MyEnum.Alpha;

            public MyEnum MyProperty

            {

                // 属性的内容应缩进

                get

                {

                    // 属性的get部分方法体应缩进

                    return myProperty;

                }

                set

                {

                    // 属性的set部分方法体应缩进

                    myProperty = value;

                }

            }

        }

    //这里用空行分开,设置我们可以用 #region#endregion把一块一块的代码收缩起来

        public enum MyEnum

        {

            // 枚举类型内容应缩进

            Alpha,

            Beta,

            Gamma

        }

    }

          

    五):不同功能的代码块之间用空行分隔一下,别都挤到一起,这又不是中国的房价。你放心的弄宽裕点就是了。如上例

          

    六):降低代码密度,这得从两个方面来看,第一是使用代码的字符,比如所使用的代码字符全都是诸如“MNWHFR”等密度比较大的字符,或者全都用大写等等,这都是引发代码看起来一团糟的原因。

    另外一个原因是,空格,相信现在你已经发现,在VS中每写完一行代码打最后那个分号的时候,只要之前的代码都没有错误,那么VS会帮我们自动格式化。而这个格式化最明显的就是在代码之间增加了空格。例如入下代码

                string NAME = "天轰穿";

                int AGE=DateTime.Now.Year==2010?30:31;

                //对比下上下两种写法,那种看起来舒服

                string name = "天轰穿";

                int age = DateTime.Now.Year == 2010 ? 30 : 31;

           但是需要提醒下的是,不要以为空格就好得很,空格如果多了,一样会造成视觉错误。

          

    七):代码的缩进一定是用TAB,而非4个空格,甚至更少,比如一个空格,还不如不要空格。免得让人看了生气。

          

    八):大括号的位置,以下两种,自选一种,就行了:

    public string MyMethod() {

                return "Hello!";

            }

    //第二种

    public string MyMethod()

    {

                return "Hello!";

            }

     

          

    九):使用分支或者循环注意以下几点:

    1 禁止出现两条等价的支路。
    2
    禁止GOTO语句。
    3
    IF 语句来强调只执行两组语句中的一组。
    4
    CASE 实现多路分支。
    5
    避免从循环引出多个出口。
    6
    方法只有一个出口。
    7
    不使用条件赋值语句。
    8
    避免不必要的分支。
    9
    不要轻易用条件分支去替换逻辑表达式。

    10、嵌套最好不要超过三层,禁止超过五层;

     

    十):一个方法(函数)中的代码最好不要高于100行,高于100行就已经是阅读的极限了。

     

    十一):一个类中代码最好在500行以下。尽量不要写超过1000行代码的类。

     

    十二):保持注释与代码完全一致。不允许修改了代码,却不修改注释。

          

    十三):命名,这个学问可大可小。一般的习惯是类名、方法名、属性名、事件名、结构、枚举等对象的名称是首字母大写,比如“Person”或者“Ren”。而对于类中的变量或者一般的局部变量则全小写,比如“var1,还有种情况是在变量前面加“_”前缀,例如“_name”。但是不管怎么样,有一个绝对的前提,就是你的名称一定要尽量见词知意。不要起诸如“AAABBB”等毫无意义的名称。

          

    十四):控件命名的时候注意,尽量使用控件的简化字作为前缀,例如Label控件,我们的命名就根据变量名字结合起来,如“lbl_name,lbl_age,”,TextBox控件则是“tb_name,tb_sex”等等方式。

     

    十五):别在程序中使用固定数值,用常量代替。

          

           十六):避免使用很多成员变量。声明局部变量,并传递给方法。不要在方法间共享成员变量。如果在几个方法间共享一个成员变量,那就很难知道是哪个方法在什么时候修改了它的值。
      

    十七):必要时使用enum 。别用数字或字符串来指示离散值。

          

           十八):不在代码中使用具体的路径和驱动器名。 使用相对路径,并使路径可编程。

          

           上面的十八条能够现在应用上的就赶紧应用到你的日常学习中去,还不能的也机下来,这些都是我参考了很多公司的编码规范总结出来的。换句话说,只要你做到上面这十八点,那么你以后出去上班,首先人家看你的代码就会觉得你这人不错。要不人家怎么说“见字如见人”呢?

           最后说一点,不算什么规范,但却是很多初学者最不容易养成的习惯。当然,这也是因为没有人刻意把这个小毛病提出来的原因:

           C#中,凡是成对的符号一定要一次打全了,比如给字符串赋值,那就先打两个双引号,然后回退一格到分号中间去写字符串。再比如打括号也一定要一次打完两个,大括号等都是一样。因为编程过程中很容易忘记补齐另外一半。比如我们再嵌套循环或者分支的时候,如果缺少半个大括号,那后果就是程序的意思都变了。不多大多时候是程序会发生错误。而你根本不容易检查出到底错在哪里。

           对于这种情况,最好的方式是使用断点调试,跟踪程序的整个运行流程,一行行的看代码。

     本文章由天轰穿原创作品,转载请注明出处及作者。

     

  • 相关阅读:
    过河问题 (Standard IO)
    单词分类 (Standard IO)
    C#综合揭秘——细说多线程(上)
    使用NPOI导入导出标准Excel
    C# 转义字符 ''反斜杠
    ref和out的区别
    抽象类接口的区别
    方法签名
    SQL Server的通用分页存储过程 未使用游标,速度更快!
    SQL Server存储过程Return、output参数及使用技巧
  • 原文地址:https://www.cnblogs.com/thcjp/p/2784406.html
Copyright © 2011-2022 走看看