C# Essential 6.0 Note (2)

C#本质论6.0第三章。

操作符

操作符(operator)对一系列称为操作数(operand)的值(或变量)执行数学或逻辑运算/操作来生成新值。

圆括号、结合性、优先级和求值
  • 结合性决定相似操作符的执行顺序。
  • 优先级决定不相似的操作符的执行顺序。
线程安全的递增和递减:

递增和递减操作符执行的都不是原子级别的运算,在操作符执行期间,可能发生线程上下文切换,可能发生竞态条件。
- 可以使用lock语句来防止出现竞争条件。
- 对于简单的递增和递减运算,可以使用由Syetem.Threading.Interlocked类提供的线程安全方法:Increment()Decrement()

代码块、作用域和声明空间
  • 作用域:命名事物的作用域是源代码的一个区域,在该区域中,可以使用非限定名称引用该事物。
  • 声明空间(declaration space):声明空间是命名事物的逻辑容器,该容器中不能存在同名的两个事物。
  • 代码块:代码块不仅定义了作用域,还定义了局部变量声明空间。在一个代码块中,可以通过变量名使用局部变量,但必须保证这个名称在这个代码块中是唯一声明的。声明局部变量的代码块外部,没有办法用局部变量的名称来引用它,当局部变量出现在代码外部时,我们说局部变量超出了作用域。
空结合操作符
  • 作用:如果这个值为空,就使用另外一个值。
  • 形式:`expression1 ?? expression2
null条件操作符
  • 作用:在调用方法或属性之前检查操作数是否为null
  • 形式:args?.Length(args != null) ? (int?)args.Length : null在逻辑上等价。
  • null条件操作符可以和索引操作符结合使用,但如果索引操作符针对不存在索引引发IndexOutOfRangeException,就该避免结合使用。
  • 使用null条件操作符和委托:
    //简化前
    PropertyChangedEventHandler propertyChanged = PropertyChanged;
    if (propertyChanged != null)
    {
        propertyChanged(this,new PropertyChangedEventArgs(nameof(Name)));
    }
    //简化后
    ProperyChanged ?. Invoke(this,new PropertyChangedEventArgs(nameof(Name)));
按位操作符
  • 移位操作符:
    • 左移<<时,所有位都向左移动由操作符右侧的操作数指定的位数,移位后右边留下的空位由0补充。
    • 右移>>时,向相反方向移位,如果是负数,左侧填充1而不是0
C#预处理指令:

控制流语句中的条件表达式在运行时求值,相反,C#预处理器在编译时调用。预处理指令告诉C#编译器要编译哪些代码,并指出如何处理代码中的特定错误和警告。C#预处理指令还可告诉C#编辑器有关代码组织的信息。
- 每个预处理指令都以#开头,而且必须在一行中写完,换行符标志着预处理指令的结束。

排除和包含代码
    #if CSHARP2PLUS
    System.Console.Clear();     // 遇到C#1.x编译器就排除C#2.0代码
    #endif

    #if LINUX
    ...
    #elif WIMDOWS               // elif == else-if
    ...
    #endif
定义预处理符号
  • 使用#define指令定义预处理符号。
  • 使用#undef指令取消符号定义。
生成错误和警告
  • 使用#error指令输出错误信息。
  • 使用#warning指令输出警告信息。
  • 使用#pragma指令可以禁用#warning指令,在warning之后添加restore可以还原警告。
指定行号
  • 使用#line指令可以改变C#编译器在报告错误或警告时显示的行号。
    #line 113 "T"
    #warning "Same move allowed multiple times"
    #line default
    // 编译器会将实际发生在125行的警告报告在113号发生
    // #line default会反转之前的所有#line的效果
可视编辑器提示
  • 使用#region指令声明代码区域,与#endregion成对使用,两个指令都可以选择在指令后面跟随一个描述性的字符串,还可以将一个区域嵌套到另一个区域中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值