C# 关键字,运算符,预微处理器指令
关键字是对编译器具有特殊意义的预定义保留标识符。它们不能在程序中用作标识符,除非它们有一个 @ 前缀。例如,@if 是有效的标识符,但 if 不是,因为 if 是关键字。
本主题中的第一个表列出的关键字在 C# 程序的任何部分都是保留标识符。本主题中的第二个表列出了 C# 中的上下文关键字。上下文关键字仅在受限制的程序上下文中具有特殊含义,并且可在该上下文外部用作标识符。通常,在将新关键字添加到 C# 语言的同时,也会将它们添加为上下文关键字,以便避免破坏用该语言的早期版本编写的程序。
abstract |
as |
base |
bool |
break |
byte |
case |
catch |
char |
checked |
class |
const |
continue |
decimal |
default |
delegate |
do |
double |
else |
enum |
event |
explicit |
extern |
false |
finally |
fixed |
float |
for |
foreach |
goto |
if |
implicit |
in |
in (generic modifier) |
int |
interface |
internal |
is |
lock |
long |
namespace |
new |
null |
object |
operator |
out |
out (generic modifier) |
override |
params |
private |
protected |
public |
readonly |
ref |
return |
sbyte |
sealed |
short |
sizeof |
stackalloc |
static |
string |
struct |
switch |
this |
throw |
true |
try |
typeof |
uint |
ulong |
unchecked |
unsafe |
ushort |
using |
virtual |
void |
volatile |
while |
上下文关键字
上下文关键字用于提供代码中的特定含义,但它不是 C# 中的保留字。某些上下文关键字(如 partial 和 where)在两个或更多个上下文中具有特殊含义。
add |
alias |
ascending |
async |
await |
descending |
dynamic |
from |
get |
global |
group |
into |
join |
let |
orderby |
partial (type) |
partial (method) |
remove |
select |
set |
value |
var |
where (generic type constraint) |
where (query clause) |
yield |
C# 运算符
C# 提供了许多运算符,这些运算符是指定要在表达式中执行哪些操作(数学、索引、函数调用等等)的符号。在应用于用户定义类型之前,你可以对许多运算符进行重载以更改其含义。
针对整型类型的运算(如 ==、!=、<、>、&、|)通常可用于枚举 (enum) 类型。
以下章节按最高优先级到最低优先级的顺序列示 C# 运算符。各章节内运算符的优先级相同。
主要运算符
以下是具有最高优先级的运算符。请注意,你可以单击运算符转到包含示例的详细页面。
x.y - 成员访问。
x?.y - null 条件成员访问。如果左边操作数为 null,则返回 null。
f(x) - 函数调用。
a[x] - 聚合对象索引。
a?[x] - null 条件索引。如果左边操作数为 null,则返回 null。
x++ - 后缀递增。先返回 x 值,然后用加 1(通常加整数 1)后的 x 值更新存储位置。
x-- - 后缀递减。先返回 x 值,然后用减 1(通常减整数 1)后的 x 值更新存储位置。
New - 类型实例化。
Typeof - 返回表示操作数的 System.Type 对象。
Checked - 对整数运算启用溢出检查。
Unchecked - 对整数运算禁用溢出检查。这是默认的编译器行为。
default(T) - 返回类型 T 的默认初始化值,T 为引用类型时返回 null,T 为数值类型时返回零,T 为结构类型时返回填充为零/null 的成员。
Delegate - 声明并返回一个委托实例。
Sizeof - 返回类型操作数的大小(以字节为单位)。
-> - 取消指针引用与成员访问相结合。
一元运算符
这些运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击运算符转到包含示例的详细页面。
+x - 返回 x 值。
-x - 数值求反。
!x - 逻辑求反。
~x - 按位求补。
++x - 前缀递增。先用加 1(通常加整数 1)后的 x 值更新存储位置,然后返回 x 值。
--x - 前缀递减。先用减 1(通常减整数 1)后的 x 值更新存储位置,然后返回 x 值。
(T)x - 类型转换。
Await - 等待 Task。
&x - 地址。
*x - 取消引用。
乘法运算符
这些运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击运算符转到包含示例的详细页面。
x * y - 乘法。
x / y - 除法。如果操作数均为整数,则结果为整数,舍去小数(例如,-7 / 2 is -3)。
x % y - 取模。如果操作数均为整数,则返回 x 除以 y 后的余数。如果 q = x / y 且 r = x % y,则 x = q * y + r。
加法运算符
这些运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击运算符转到包含示例的详细页面。
x + y - 加法。
x – y - 减法。
移位运算符
这些运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击运算符转到包含示例的详细页面。
x << y - 向左移位,右边移出的空位补零。
x >> y - 向右移位。如果左操作数是 int 或 long,则左位数补符号位。如果左操作数是 uint 或 ulong,则左位数补零。
关系和类型测试运算符
这些运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击运算符转到包含示例的详细页面。
x < y - 小于(如果 x 小于 y,则为 true)。
x > y - 大于(如果 x 大于 y,则为 true)。
x <= y - 小于等于。
x >= y - 大于等于。
Is - 类型兼容性。如果求值后的左操作数可以转换为右操作数中指定的类型(静态类型),则返回 true。
As - 类型转换。返回左操作数并转换为右操作数中指定的类型(静态类型),但 as 返回 null,其中 (T)x 会引发异常。
相等运算符
这些运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击运算符转到包含示例的详细页面。
x == y - 相等。默认情况下,对于 string 以外的引用类型,此运算符返回引用相等(标识测试)。但是,类型可以重载 ==,因此,如果你想测试标识,最好对 object 使用 ReferenceEquals 方法。
x != y - 不相等。请参阅有关 == 的注释。如果某个类型重载 ==,则它必须重载 !=。
逻辑 AND 运算符
此运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击该运算符转到包含示例的详细页面。
x & y - 逻辑或位 AND。与整数类型一起使用,并且通常允许 enum 类型。
逻辑 XOR 运算符
此运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击该运算符转到包含示例的详细页面。
x ^ y - 逻辑或位 XOR。通常可以将此运算符与整数类型和 enum 类型一起使用。
逻辑 OR 运算符
此运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击该运算符转到包含示例的详细页面。
x | y - 逻辑或位 OR。与整数类型一起使用,并且通常允许 enum 类型。
条件 AND 运算符
此运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击该运算符转到包含示例的详细页面。
x && y - 逻辑 AND。如果第一个操作数为 false,则 C# 不对第二个操作数求值。
条件 OR 运算符
此运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击该运算符转到包含示例的详细页面。
x || y - 逻辑 OR。如果第一个操作数为 true,则 C# 不对第二个操作数求值。
Null 合并运算符
此运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击该运算符转到包含示例的详细页面。
x ?? y - 如果不为 null,则返回 x;否则返回 y。
条件运算符
此运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击该运算符转到包含示例的详细页面。
t ? x : y - 如果测试 t 为 true,则求值并返回 x;否则,求值并返回 y。
赋值和 Lambda 运算符
这些运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击运算符转到包含示例的详细页面。
x = y - 赋值。
x += y - 递增。 x 值加 y 值,结果存储在 x 中,并返回新值。如果 x 指定 event,则 y 必须是 C# 作为事件处理程序添加的相应函数。
x -= y - 递减。 x 值减 y 值,结果存储在 x 中,并返回新值。如果 x 指定 event,则 y 必须是 C# 作为事件处理程序删除的相应函数
x *= y - 乘法赋值。 x 值乘以 y 值,结果存储在 x 中,并返回新值。
x /= y - 除法赋值。 x 值除以 y 值,结果存储在 x 中,并返回新值。
x %= y - 取模赋值。 x 值除以 y 值,余数存储在 x 中,并返回新值。
x &= y - AND 赋值。 y 值和 x 值相与,结果存储在 x 中,并返回新值。
x |= y - OR 赋值。 y 值和 x 值相或,结果存储在 x 中,并返回新值。
x ^= y - XOR 赋值。 y 值和 x 值相异或,结果存储在 x 中,并返回新值。
x <<= y - 左移赋值。将 x 值向左移动 y 位,结果存储在 x 中,并返回新值。
x >>= y - 右移赋值。将 x 值向右移动 y 位,结果存储在 x 中,并返回新值。
=> - lambda 声明。
算术溢出
算术运算符(+、-、*、/)产生的结果可能会超出所涉数值类型的可能值的范围。详细信息应参考特定运算符的相关章节,而一般情况下:
-
整数算术溢出或者引发 OverflowException,或者放弃结果的最高有效位。整数被零除总是引发 DivideByZeroException。
-
浮点算术溢出或被零除从不引发异常,因为浮点类型基于 IEEE 754,因此可以表示无穷大和 NaN(非数值)。
-
小数算术溢出总是引发 OverflowException。小数被零除总是引发 DivideByZeroException。
当发生整数溢出时,产生的结果取决于执行上下文,该上下文可为 checked 或 unchecked。在 checked 上下文中引发 OverflowException。在 unchecked 上下文中,放弃结果的最高有效位并继续执行。因此,C# 让你有机会选择处理或忽略溢出。
除算术运算符以外,整型类型之间的转换也会导致溢出(例如,将 long 转换为 int)并受 checked 或 unchecked 执行的限制。但是,位运算符和移位运算符永远不会导致溢出。
C# 预处理器指令
本节包含有关以下 C# 预处理器指令的信息。
#if
#else
#elif
#endif
# define
#undef
#warning
#error
#line
#region
#endregion
#pragma
#pragma warning
#pragma checksum
请参见各个主题有关更多信息和示例。
虽然编译器没有单独的预处理器,本节中介绍的处理指令,就象一个。它们在条件编译用于帮助。与 C 和 C++ 指令不同,不能使用这些指令创建宏。
预处理器指令必须是行上的唯一指令。
C# Compiler Options
本节内容
- Command-line Building With csc.exe
-
有关从命令行生成 Visual C# 应用程序的信息。
- How to: Set Environment Variables for the Visual Studio Command Line
-
提供运行 vsvars32.bat 以启用命令行编译的步骤。
- 部署 C# 应用程序
-
描述用于部署 C# 应用程序的选项。
- 按类别列出的 C# 编译器选项
-
编译器选项的分类列表。
- 按字母顺序列出的 C# 编译器选项
-
按字母顺序排序的编译器选项列表。
C# Compiler Errors
某些 C# 编译器错误有相应的主题说明错误生成的原因,在某些情况下还说明了如何修复错误。若要了解某个特定错误消息是否有帮助信息,请使用以下步骤之一。
-
查看错误号 (例如 CS0029),在 “输出”窗口为,然后搜索 MSDN。
-
选择该错误号 (例如 CS0029),在 “输出”窗口,然后选择 F1 键。
-
在“索引”中的“查找”框中键入错误号。
如果这些步骤都不会产生有关该错误的信息,请转到结尾此页,然后发送包含错误数或文本的反馈。
有关在 C# 中如何配置错误和警告选项的信息,请参见“项目设计器”->“生成”页 (C#)。
|
---|
以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。 这些元素取决于你所使用的 Visual Studio 版本和你所使用的设置。 有关详细信息,请参阅个性化 Visual Studio IDE。 |