zoukankan      html  css  js  c++  java
  • Effective C#笔记(1)

    条款1:使用属性代替可访问的数据成员

    属性采用方法来实现,添加多线程支持就更加容易;

     1public string Name
     2{
     3  get
     4  {
     5    lock(this)
     6    {
     7      return _name;
     8    }

     9  }

    10  set
    11  {
    12    lock(this)
    13    {
    14      _name = value;
    15    }

    16  }

    17}
    虚属性,抽象属性,或者作为接口定义的一部分;
     1public class Customer
     2{
     3  private string _name;
     4  public Virtual string Name
     5  {
     6    get{return _name;}
     7    set{_name = value;}
     8  }

     9  
    10}

    可以为一个属性的两个访问器提供不同的访问权限控制;
    索引器:带参数的属性(parameterized property);

    数据成员与属性在二进制上不兼容。

    条款2:运行时常量(readonly)由于编译时常量(const)

    编译时常量与运行时常量行为的不同表现为它们的访问方式。(编译时常量在编译后的代码中会被替换为常量值,而运行时常量会维持对readonly变量的引用)

    条款3:操作符is或as优于强制转型

    将参数向下转型为其它类型,或者是类,或者是接口。对于这种转型,尽可能选择as操作符。还有一种保险做法是先使用is来做一个转换测试,然后再使用as操作符;
    as操作符比强制转型安全,而且有较好的效率,永远不会在转换过程中构造新的对象。

     1object o = Factory.GetObject();
     2MyType t = o as MyType;
     3if(t!=null)
     4{
     5//handle t
     6}

     7else
     8{
     9//error
    10}


    as操作不能应用于值类型(foreach循环语句中使用就是强制类型转换,因为他要保证值类型也能成功);
    使用System.Object.GetType()方法可以获得对象的运行时确切类型,这种测试比is或as更严格,运行时测试主要应用于相等判断(参见条款9)。

  • 相关阅读:
    php文件下载原理
    spring源码@configuration&@bean
    解决java在idea运行正常,但是打成jar包后中文乱码问题
    IntelliJ IDEA查看堆内存和类继承关系
    jenkins无法展示报告
    解决windows(slave)导致linux(master)输出乱码
    UIRECODER安装记录
    vue项目前后端部署
    django orm
    django笔记
  • 原文地址:https://www.cnblogs.com/wxfasdic/p/1566380.html
Copyright © 2011-2022 走看看