zoukankan      html  css  js  c++  java
  • C#编码好习惯,献给所有热爱c#的同志(转)(3)

    45.  接口中的成员不应该超过20个。

    a) 
    实际情况可能限制为12

    46. 
    避免接口成员中包含事件。

    47. 
    避免使用抽象方法而使用接口替换。

    48. 
    在类层次中显示接口。

    49. 
    推荐使用显式的接口实现。

    50. 
    从不假设一个类型兼容一个接口。Defensively query for that interface.

    SomeType obj1;

    IMyInterface obj2;


    /*
    假设已有代码初始化过obj1,接下来 */

    obj2 = obj1 as IMyInterface;

    if (obj2 != null)

    {

      obj2.Method1();

    }

    else

    {

      //
    处理错误



    51. 
    表现给最终用户的字符串不要使用硬编码而要使用资源文件替换之。

    52. 
    不要硬编码可能更改的基于配置的字符串,比如连接字符串。

    53. 
    当需要构建长的字符串的时候,使用StringBuilder不要使用string

    54. 
    避免在结构里面提供方法。

    a) 
    建议使用参数化构造函数

    b) 
    可以重裁操作符

    55. 
    总是要给静态变量提供静态构造函数。

    56. 
    能使用早期绑定就不要使用后期绑定。

    57. 
    使用应用程序的日志和跟踪。

    58. 
    除非在不完全的switch语句中否则不要使用goto语句。

    59. 
    switch语句中总是要有default子句来显示信息(Assert)

    int number  = SomeMethod();

    switch(number)

    {

      case 1:

          Trace.WriteLine("Case 1:");

          break;

      case 2:

          Trace.WriteLine("Case 2:");

          break;

      default :

          Debug.Assert(false);

          break;

    }

    60. 
    除非在构造函数中调用其他构造函数否则不要使用this指针。

    //
    正确使用this的例子

    public class MyClass

    {

      public MyClass(string message )

      {}

      public MyClass()  : this("hello")

      {}

    }

    61. 
    除非你想重写子类中存在名称冲突的成员或者调用基类的构造函数否则不要使用base来访问基类的成员。

    //
    正确使用base的例子

    public class Dog

    {

      public Dog(string name)

      {}

      virtual public void Bark( int howLong)

      {}

    }

    public class GermanShepherd : Dog

    {

      public GermanShe pherd(string name): base (name)

      {}

      override public void Bark(int  howLong) 

      {

          base .Bark(howLong); 

      }

    }

    62. 
    基于模板的时候要实现Dispose()Finalize()两个方法。

    63. 
    通常情况下避免有从System.Object转换来和由System.Object转换去的代码,而使用强制转换或者as操作符替换。

    class SomeClass

    {}

    //
    避免:

    class MyClass <T> 

    {   

      void SomeMethod(T t)   

      {

          object temp = t;     

          SomeClass obj = (SomeClass)temp;   

      }

    }

    //
    正确:

    class MyClass <T> where T : SomeClass

    {   

      void SomeMethod(T t)   

      {

          SomeClass obj = t;   

      }

    }

    64. 
    在一般情况下不要定影有限制符的接口。接口的限制级别通常可以用强类型来替换之。

    public class Customer

    {…}

    //
    避免:

    public interface IList <T> where T : Customer 

    {…}

    //
    正确:

    public interface ICustomerList : IList <Customer> 

    {…}

    65. 
    不确定在接口内的具体方法的限制条件。

    66. 
    总是选择使用C#内置(一般的generics)的数据结构。
  • 相关阅读:
    C#规范整理·异常与自定义异常
    C#规范整理·资源管理和序列化
    C#规范整理·泛型委托事件
    C#规范整理·集合和Linq
    <抽象工厂>比<工厂方法>多了啥(区别)
    <工厂方法>比<简单工厂>多了啥(区别)
    Unable to start Ocelot because either a ReRoute or GlobalConfiguration
    MySQL服务安装
    mysql登录报错“Access denied for user 'root'@'localhost' (using password: YES”)的处理方法
    使用博客系统发生_STORAGE_WRITE_ERROR_错误
  • 原文地址:https://www.cnblogs.com/soso_ak/p/1433502.html
Copyright © 2011-2022 走看看