• 更锋利的C#代码读书笔记



    第一章 基本的代码风格
    第二章 养成良好的注释习惯
    第三章 一般命名规范
    第四章 数据处理
        1.十六进制常量的写法
            int i = 0x0000;
            int j = 0x0101;
            int m = 2L;
        2.浮点数的表示有误差!作为条件判断时不能与准确值比较,应使用区间比较。
            double i = 0.0;
            while (i < 10)
            {
                i += 0.1;
                Console.WriteLine(i.ToString());
                if(Math.Abs(i-6.0) < 0.01) //使用区间比较。if (i == 6.0)
                {
                    Console.WriteLine("OK!");
                }
            }
            Console.Read();
        3.布尔类型是一个独立类型,而不是采用整形数值来表示。
        4.字符类型采用Unicode编码,需要两个字节的存储空间。因此char可转换为short/int/long或更宽类型。
        5.字符串类型,可以包含转义字符,用“@”可忽略转义字符。
            string str = "D:/Document/Photos/Flower.jpg";
        6.字符串判断为空(应尽量使用类型本身提供的功能)。
            if(str = string.Empty){}
            if(string.IsNullOrEmputy(str)){}
        7.string类型为不可变类型,对字符串所做的操作都产生了新的字符串实例。
            使用“+”连接string效率低,用stringBuilder类型的Append方法连接字符串效率更高。
        8.尽可能的使用内置关键字。
            lock(obj)
            {
                DoSomething(obj);
            }
            等同于:
            System.Threading.Monitor.Enter(obj);
            try
            {
                DoSomething(obj);
            }
            finally
            {
                System.Threading.Monitor.Exit(obj);
            }
        9.初始化一切变量!!!
        10.把对于一个变量的操作,写到一起,使思路更清晰。
        11.构建树形层次结构时,从叶节点开始构建,效率更高。
        12.枚举类型,用来表示一组相对固定的互斥的有限个数的可能性。
        13.枚举类型的命名(Month,ConsoleKey,FontStyles)。
        14.标记枚举,各项值都是2的幂数。
            [Flags] //标记枚举
            {
                None = 0,   //默认项
                Read = 1,
                Write = 2,
                Modify = 4,
                Execute = 8,
                ReadWrite = Read | Write,   //组合项
                FullControl = Read | Write | Modify | Execute
            }
        15.魔数(Magic Number),是指以数字形式出现在代码中的常量。为尽量避免使用数字,应预定义常量。
     16.避免不易读懂的长表达式。
     17.复杂表达式中需要注意带有副作用(改变操作数的值)的运算符。
    第五章 分支结构
        1.采用“排除法”检查异常情况。(缺点:程序不会继续执行。)
     if(true)
     {
         MessageBox.Show("error!");
         return null;
     }
        2.使用“标志变量”记录错误。(优点:不影响程序的继续执行。)
     bool successful = true;
     for(int i = 0; i<10; i++)
     {
         try
         {
      File.Copy(xxx[i],xxx[i])
         }
         catch
         {
      successful = false;
         }
     }
     if(!successful)
     {
         MessageBox.Show("error!");
     }
     return successful;
        3.在C#中,"switch"语句不允许贯穿,每个标签必须以“break”结束。
        4.在switch语句中,应避免default子句的滥用。
     …
     default:
         throw new Exception("error!");
     …
        5.switch结构特点:每组测试一个表达式,应用于整数、枚举、字符串类型,书写简洁。
        6.无论是if还是switch结构,其目标是最恰当地表现出事物原本的逻辑关系,并尽可能的使代码简洁。
        7.分值结构,先判断最有可能成立的条件。
        8.只要不会引起严重的性能损失,那么可读性就是最重要的。
        9.使用“&&”、“||”,有短路效应。
        10.在错误处理中需要使用goto语句。使用goto原则是使程序代码的逻辑显得更为清晰。
    第六章 循环结构
        1.在C#中,for循环和while循环同样灵活,两个结构可以互换,不局限于数值控制循环。
        2.for循环和while循环的差异主要在思维模式上。
        3.for循环更适合于简单的数值迭代。
        4.规则:凡是需要在循环过程中改变循环变量值的情况,都应避免使用for循环。
        5.用foreach结构轻松实现对数组和集合的遍历访问。
        6.用foreach本身有一个限制:整个遍历过程中对集合的操作应该是只读的。
        7.对数组或集合,用foreach;循环次数可预知,用for;循环结构复杂,循环次数变化,用while。
        8.循环变量一般使用i、j、k表示,i为最外层,j为中间层,k为最内层。
        9.循环嵌套最好三层以内。
        10.循环变量最好不要再循环外使用,在循环外使用更有意义的变量名(row,col)。
        11.循环变量只用于循环内部时,应在for,while语句中定义。
        12.避免循环变量的非常规应用,不要以可读性为代价使用所谓的“技巧”,应采用标志变量的方式进行控制。
     bool found = false;
     for(int i = 0; i < max; i++)
     {
         if(Match(data[i]) == true)
         {
      found = true;
      break;
         }
     }

     if(found)
     {
         Console.WriteLine("Found");
     }
     else
     {
         Console.WriteLine("No Found");
     }
        13.应尽量优化循环,提高循环的效率。
        14.程序的可读性非常重要!!!
        15.循环是非常消耗资源的,应尽量避免在循环中做不必要的操作。
    第七章 如何使用函数
        1.引入函数,为了实现代码复用,更重要的是隐藏细节。
        2.使用函数进行抽象,分解完成一件事的步骤,降低复杂度。
        3.函数重载的目的是方便调用者
     1)支持多种数据类型
     2)支持多种数据提供方式
     3)为复杂的参数提供默认值
        4.保持核心代码的唯一。
     各重载函数的核心功能应该由一个函数实现,真正的工作应该让最复杂的那个重载版本来完成。
        5.参数的设计。
     1)参数命名:描述性,明确意义。
     2)使用变长参数列表。(params string[] filenames)
     3)合理使用ref参数或out参数。有时可以定义一个结果或类,作为返回数据类型。
     4)参数的顺序:重->轻,入->出。
     5)重载函数参数一致性。
        6.参数检查
     1)检查零值和空引用。
     2)检查枚举类型。
     3)防止数据被篡改,对于引用类型,应先制作一份私有副本,再进行验证和处理。
     4)检查数据合法性的位置。
        7.离开函数的三种方式:自然结束;return;异常。
    第八章 结构与类

  • 相关阅读:
    getGuid()
    DELPHI7在WIN8和WIN10下安装和运行
    oracle存储过程返回数据集结果
    咏南多层开发框架支持最新的DELPHI 10 SEATTLE
    咏南中间件支持手机客户端
    最精简的IOCP封装
    完成端口iocp——在螺丝壳里做道场
    异步选择模式中使用完成端口做它的消息队列
    阿里百川IMSDK--自定义群聊界面
    Customizing Navigation Bar and Status Bar
  • 原文地址:https://www.cnblogs.com/kimblog/p/2279491.html
Copyright © 2020-2023  润新知