引言
在C#编程语言中,运算符和表达式是构建程序逻辑的基础。它们允许程序员执行算术、比较、赋值等操作。深入理解运算符和表达式的使用对于编写高效、可读和可维护的代码至关重要。本文将详细探讨C#中的运算符和表达式,包括它们的分类、用法以及一些高级特性。
运算符
运算符是用于执行操作的符号。C#提供了多种运算符,可以分为以下几类:
算术运算符
算术运算符用于执行基本的数学运算。
- 加法:
- 减法:
-
- 乘法:
*
- 除法:
/
- 取模:
%
- 整除:
/
- 幂:
^
赋值运算符
赋值运算符用于将值赋给变量。
- 简单赋值:
=
- 复合赋值:
=
,-=
,*=
,/=
,%=
比较运算符
比较运算符用于比较两个值。
- 等于:
==
- 不等于:
!=
- 大于:
>
- 小于:
<
- 大于等于:
>=
- 小于等于:
<=
逻辑运算符
逻辑运算符用于执行布尔逻辑运算。
- 逻辑与:
&&
- 逻辑或:
||
- 逻辑非:
!
位运算符
位运算符在二进制级别上操作整数。
- 按位与:
&
- 按位或:
|
- 按位异或:
^
- 按位非:
~
- 左移:
<<
- 右移:
>>
其他运算符
C#还提供了一些其他类型的运算符。
- 三元条件运算符:
?:
- 索引运算符:
[]
- 成员访问运算符:
.
和->
- 强制类型转换运算符:
()
- 可空运算符:
?.
和?[]
表达式
表达式是由变量、常量、运算符和函数调用组成的组合,它们可以计算出一个值。
算术表达式
代码语言:javascript复制int result = 5 3 * 2; // 结果为11
赋值表达式
代码语言:javascript复制int a = 10;
int b = a; // b的值为10
条件表达式
代码语言:javascript复制int max = (a > b) ? a : b; // 如果a大于b,则max为a的值,否则为b的值
调用表达式
代码语言:javascript复制int factorial = CalculateFactorial(5); // 调用函数CalculateFactorial
运算符优先级
在没有括号的情况下,运算符的优先级决定了表达式中运算的顺序。
- 括号
()
- 幂
^
- 负号
-
(一元运算符) - 乘法
*
, 除法/
, 取模%
- 加法
-
- 移位
<<
,>>
- 按位与
&
- 按位异或
^
- 按位或
|
- 逻辑与
&&
- 逻辑或
||
- 条件运算符
?:
- 赋值运算符
=
,=
,-=
, 等等
运算符重载
C#允许开发者重载运算符,以自定义类或结构体的运算符行为。
代码语言:javascript复制public class Complex
{
public double Real { get; set; }
public double Imaginary { get; set; }
public static Complex operator (Complex c1, Complex c2)
{
return new Complex
{
Real = c1.Real c2.Real,
Imaginary = c1.Imaginary c2.Imaginary
};
}
}
表达式树
表达式树是用于表示代码中表达式的树状数据结构。它们在LINQ查询和动态方法调用中非常有用。
代码语言:javascript复制Expression<Func<int, bool>> expression = x => x > 10;
匿名函数
匿名函数是一种没有名称的函数,通常用于委托和表达式树。
代码语言:javascript复制Func<int, bool> func = x => x > 10;
运算符和表达式的高级用法
条件运算符
条件运算符是一种简洁的三元运算符,用于基于条件表达式计算两个值中的一个。
代码语言:javascript复制int max = (a > b) ? a : b;
运算符优先级和括号
正确使用括号可以改变运算符的默认优先级,确保表达式按照预期执行。
代码语言:javascript复制int result = (5 3) * 2; // 结果为16
运算符重载
运算符重载允许自定义类型的行为,使其可以像内置类型一样使用运算符。
代码语言:javascript复制public class Vector2D
{
public double X { get; set; }
public double Y { get; set; }
public static Vector2D operator (Vector2D v1, Vector2D v2)
{
return new Vector2D { X = v1.X v2.X, Y = v1.Y v2.Y };
}
}
表达式树
表达式树是构建复杂查询和动态执行代码的强大工具。
代码语言:javascript复制var query = from num in numbers
where num > 5
select num;
匿名函数
匿名函数提供了一种方便的方式来创建简短的函数,通常用于委托和事件。
代码语言:javascript复制int[] numbers = { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0);