zoukankan      html  css  js  c++  java
  • C#几个经常犯错误汇总

    在我们平常编程中,时间久了有时候会形成一种习惯性的思维方式,形成固有的编程风格,但是有些地方是需要斟酌的,即使是一个很小的错误也可能会导致昂贵的代价,要学会善于总结,从错误中汲取教训,尽量不再犯同样错误,注重编程之美,代码的优雅,总结几个平常经常犯的错误。

    1、在C#编程中,字符型类型是最容易处理出错的地方,代价是非常昂贵,在.Net Framwork中,字符串是一个相当特别的引用类型,string本省就是一个不可继承的密封类,但是它具有了值类型所应用的特点,但是它在CLR中内存还是保存于托管堆之上,也就是说,当我们每次定义一个字符串类型的时候,就在堆内存中开辟一端内存,而当我们字符串被修改之后,它会创建一个新的内存,注意这里的内存是不连续的,而是通过修改栈内地址引用而拼凑字符串,不会改变源字符串在内存中的地址,所以有些程序员总是喜欢使用这样的方法格式化字符串:

    string  SelectText="select * from "+TableName+" where UserName='"+Name+"'";

    上述代码,使用了字符串拼凑的方法,因为使用了多重串联,因此会在内存中创建两个不必要的字符串垃圾副本。

    string SelectText=string.Format("select  *  from {0} where UserName={1}",TableName,Name);

    2、大多数开发人员都不知道内置的验证数据类型的方法,如System.Int32,因此很多人都是自己实现的,其实这是不妥的,因为这些基本类型中都存在自己固有的类型验证方法,下面这个就是自己实现验证的一个字符串是否是数值的代码:

    public bool CheckIfNumeric(string value)
    {
    bool IsNumeric=true;
    try
    {
    int i=Convert.ToInt32(value);
    }
    catch(FormatException excepiton)
    {
    IsNumeric=false;
    }
    return IsNumeric;
    }

    虽然使用了try catch语句,这不是最佳的做法,更好的方法是下面使用Int.TryParse;

    int output=0;
    bool IsNumeric=int.TryParse(value,out output);

    int.TryParse是更快、更简洁的方法。

    3、学会合理的管理公共变量,我们在系统中经常会滥用公共变量,没有做到合适的封装好。

    View Code
     1 static  void Main(string[]  args)
    2 {
    3 MyAccount account=new MyAccount();
    4 //这地方不能随便的调用account里面的字段进行更改,但是缺改了
    5 account.AccountNumber="ddddddddd";
    6 Console.ReadKey();
    7 }
    8 public class MyAccount
    9 {
    10 public string AccountNumber;
    11 public MyAcctount()
    12 {
    13 AccountNumber="ssssssssssssss";
    14 }
    15 }

    在上面的MyAccount类中生命了一个AccountNumber公共变量,理想情况下,AccountNumber应该是只读的,不能让外界修改,但是这里MyAccount类却没有对它做任何控制。

    声明公共做法应该是使用属性,如:

    View Code
     1 public  class  MyAccount
    2 {
    3 private stirng _accountNumber;
    4 public string AccountNumber
    5 {
    6 get { return _accountNumber; }
    7 }
    8 public MyAccount()
    9 {
    10 _accountNumber="dddddddd";
    11 }
    12 }

    这里我们封装了AccountNumber公共变量,它变成了只读,不能由调用者类进行修改。

  • 相关阅读:
    LPC2478时钟模块详解
    LPC2478内存布局以及启动方式
    STM8的GPIO驱动
    STM8时钟系统详解
    ELF文件格式分析--结构篇
    S3C2440 TFTLCD驱动详解
    S3C2440触摸屏驱动详解
    S3C2440 ADC详解
    STM8建立IAR工程
    STM8单片机启动流程彻底探究--基于IAR开发环境
  • 原文地址:https://www.cnblogs.com/lihuijun/p/2423480.html
Copyright © 2011-2022 走看看