关键字

1 new

  创建对象/调用构造函数

  隐藏基类成员

  new()约束,表明泛型类声明中的任何参数都必须有公共无参构造函数

  new 实现多态

1.1  

  new class:分配内存,调用构造函数实例化

  new struct:调用构造函数实例化

  new int:初始化值为0

(值类型与引用类型new 的时候,值类型直接初始化其值,引用类型还是给他分配内存)

2 base/this

  base:

    在构造函数子类访问父类公有 受保护属性

    调用基类方法(在子类中已被重写),多层父类向上一层一层找知道找到为止

    构造函数中:base  先调用父类构造函数

  this :

    只能出现在对象内部,对象外部访问不到

    指示属性/参数名称相似时的属性成员

      this.Name(属性)=Name(参数)

    传递当前实例

      ReFresh(this)

    声明索引器

      pubic string this[int para]

      {

        get{return array[para] ;}

      }

2.1 类实例化顺序

   实例化基类-->实例化父类-->数理化父类-->实例化子类

3 using  

    创建namespace/class别名

      using ATC=Xmals.Device.ATC

    using== dispose  if Class:IDisposable  Dispose用于清理对象的非托管资源,而不是释放对象的内存,托管对象的内存永远由GC控制

4 null

    引用对象的默认值(表示这个对象声明但未初始化,引用是无效的)

    Nullable<T>==T?  Nullable<T>本质上是个预定义的结构体

    ??

        a=b??c  如果b为null,则a=c,否则a=b

        a=b??c??d??e??f,选择bcdef中不为空的数

5 null Object

    将if(user!=null){}  ---->if(NullUser.IsNull)  避免抛出空引用异常

    利用扩展方法实现null object

6 Lock

  string特殊,整个应用程序只有一个实例,不用lock

  多线程访问同一资源会出现问题,有以下解决方式

    Lock  

    监视器

    同步事件和等待句柄

    Mutex对象

  lock将语句块标记,保证代码执行不被其他线程终端,其他线程只有等待执行解锁之后才可以访问该语句

    object obj=new object();

    lock(object)

    {

      //xx

    }

  其原理是用了监视器,lock等同于

    System.Threading.Monitor.Enter(obj);//TryEnter

    try

    {

    //xx

    }

    finally

    {

    System.Threading.Monitor.Exit(obj);

    }  

随机推荐

  1. 深入浅出JS:Two

    JS中的Promise: MDN上面对promise的描述:Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及其返回的值. 可以直接对字面上理解:Promise:承诺,一诺千金,只 ...

  2. 《深入理解Java虚拟机》- 重载与重写

    这一节打算从“方法调用”的主题进行分析. 方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不设计方法内部的具体运行过程. 一.概念 解析调用:所有 ...

  3. 装箱与拆箱(TDB)

    装箱:把值类型转换为引用类型 拆箱:把引用类型转换为值类型 只能对之前装箱的变量进行拆箱.需要强制转换.

  4. touch - 修改文件的时间戳记.

    总览 touch [-acm][-r ref_file(参照文件)|-t time(时间值)] file(文件名)... 被废弃的版本: touch [-acm][ugly_time] file(文件 ...

  5. TFS中的账号和GIT中的账号

    有些公司使用TFS来进行git的管理,这个时候很多人没有区分TFS中的账号和GIT的账号的区别:TFS的账号和GIT账号是两套不同的体系,使用TFS管理GIT GIT是不需要账号密码,但是必须在win ...

  6. css的3d注意事项

    1,如果要写出立体效果,所有的父容器都要添加属性transform-style: preserve-3d;不然子元素不能进行3d变换:背景色要写到最外层容器,且不能有transform-style: ...

  7. Delphi流

      一.流的概念 流简单说是建立在面向对象基础上的一种抽象的处理数据的工具,它定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员只需掌握对流进行操作,而不用关心流的另一头数据的真正流向.其实 ...

  8. macOs下全局安装npm包的设置问题

    在命令行中创建一个文件.npm-global,把这个文件作为全局安装的文件夹 mkdir ~/.npm-global 设置路劲 npm config set prefix '~/.npm-global ...

  9. NX二次开发-NXString转换为char*方法

    NX9+VS2012 #include <uf.h> #include <uf_drf.h> #include <NXOpen/Annotations_Note.hxx& ...

  10. I/O与NIO(异步I/O)

    1.原来的I/O库与NIO最重要的区别是数据打包和传输方式的不同,原来的I/O以流的方式处理数据,而NIO以块的方式处理数据. 面向流的I/O系统一次一个字节地处理数据.一个输入流产生一个字节的数据, ...