C#本质论6.0第三章:操作符与控制流
2021-07-05 01:13
标签:结合 OLE rest multiple 开头 sys 存在 opera 索引 操作符(operator)对一系列称为操作数(operand)的值(或变量)执行数学或逻辑运算/操作来生成新值。 递增和递减操作符执行的都不是原子级别的运算,在操作符执行期间,可能发生线程上下文切换,可能发生竞态条件。 控制流语句中的条件表达式在运行时求值,相反,C#预处理器在编译时调用。预处理指令告诉C#编译器要编译哪些代码,并指出如何处理代码中的特定错误和警告。C#预处理指令还可告诉C#编辑器有关代码组织的信息。 C#本质论6.0第三章:操作符与控制流 标签:结合 OLE rest multiple 开头 sys 存在 opera 索引 原文地址:https://www.cnblogs.com/zhang-mo/p/9834054.html操作符
圆括号、结合性、优先级和求值
线程安全的递增和递减:
lock
语句来防止出现竞争条件。Syetem.Threading.Interlocked
类提供的线程安全方法:Increment()
和Decrement()
。代码块、作用域和声明空间
空结合操作符
null条件操作符
null
args?.Length
和(args != null) ? (int?)args.Length : null
在逻辑上等价。IndexOutOfRangeException
,就该避免结合使用。 //简化前
PropertyChangedEventHandler propertyChanged = PropertyChanged;
if (propertyChanged != null)
{
propertyChanged(this,new PropertyChangedEventArgs(nameof(Name)));
}
//简化后
ProperyChanged ?. Invoke(this,new PropertyChangedEventArgs(nameof(Name)));
按位操作符
时,所有位都向左移动由操作符右侧的操作数指定的位数,移位后右边留下的空位由0补充。
>>
时,向相反方向移位,如果是负数,左侧填充1而不是0。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
成对使用,两个指令都可以选择在指令后面跟随一个描述性的字符串,还可以将一个区域嵌套到另一个区域中。