语句
前言
-
C#语句的组成与使用
-
运算符
算术运算符;关系和类型测试运算符;逻辑运算符;赋值运算;字符串运算符;位运算符;条件运算符;运算符优先级 -
表达式的组成和书写规则
C#语句的组成与使用
语句(statement)
-
C# 程序的过程构造块,用于声明变量和常量、创建对象、变量赋值、调用方法、控制分支、创建循环等
-
语句通常以分号终止
-
由花括号({ 和 })括起来的一系列语句构成代码块
C#语句的组成与使用
例子
using System;
namespace CSharpBook.Chapter03
{
class StatementTest
{
void PrintArea(int r)
{ //代码块:printArea的方法体
const double PI = 3.14; //声明语句:声明常量
double a; //声明语句:声明变量
if (r > 0) //控制语句
{
a = PI * r * r; //赋值语句,计算圆面积
Console.WriteLine("半径={0}, 面积={1}", r, a);
}
else
{
Console.WriteLine("半径={0},半径<=0,错误!", r); //调用静态方法
}
}
static void Main()
{ //代码块:Main的方法体
StatementTest obj; //声明语句:声明对象
obj = new StatementTest(); //赋值语句/创建对象
for (int i = -2; i < 3; i++) //循环语句
{
obj.PrintArea(i); //调用对象方法
}
Console.ReadKey();
}
}
}
运算符
-
C#运算符(operator)是术语或符号,用于在表达式中对一个或多个称为操作数的进行计算并返回结果值
-
一元运算符如++或new;二元运算符如算术运算符+、-、*、/;三元运算符:条件运算符“?:”
-
当表达式包含多个运算符时,运算符的优先级控制各运算符的计算顺序
-
通过运算符重载(overload)可以为用户自定义的类型定义新的运算符
算术运算符
-
算术运算符两边的操作应是数值型。若是字符型,则自动转换成字符所对应的ASCII码值后再进行运算
-
增量运算符(++、–)可以出现在操作数之前(++variable、–variable)或之后(variable++ 、variable–)
关系和类型测试运算符
- 关系运算符的优先级相同
- 对于两个预定义的数值类型,关系运算符按照操作数的数值大小进行比较
- 对于string类型,关系运算符比较字符串的值,即按字符的ASCII码值从左到右一一比较:
首先比较两个字符串的第一个字符,其ASCII码值大的字符串大,若第一个字符相等,则继续比较第二个字符,依此类推,直至出现不同的字符为止
- 对于string以外的引用类型,如果两个操作数引用同一个对象,则==返回True。如果两个操作数引用不同的对象,则!=返回True。
- int 和System.Int32是相同的数据类型
逻辑运算符
赋值运算符
字符串运算符
- C#提供的字符串运算符只有一个:“+”,用于串联(拼接)两个字符串
- 在字符串串联运算中,如果一个操作数为null,则用空字符串来替换此操作数
位运算符
条件运算符
-
逻辑表达式? 表达式1: 表达式2;
-
首先计算“逻辑表达式”的值,如果为true,则运算结果为“表达式1”的值,否则运算结果为“表达式2”的值
-
计算a和b两个数中较大的数,并将其赋给变量maxnum中,语句为:
maxnum = (a > b)? a : b;
null相关运算符
其他运算符和运算符优先级
-
sizeof用于获取值类型的字节大小,仅适用于值类型,而不适用于引用类型
-
sizeof运算符只能在不安全代码块中使用
-
typeof用于获取类型的System.Type对象,例如:System.Type type = typeof(int);
若要获取表达式的运行时类型,可以使用.NET Framework方法GetType() -
nameof用于返回标识符(类型、成员、变量等)的名称
unsafe static void Main()
{
Console.WriteLine("The size of short is {0}.", sizeof(short));
Console.WriteLine("The size of int is {0}.", sizeof(int));
Console.WriteLine("The size of long is {0}.", sizeof(long));
Console.ReadKey();
}
Type t1 = typeof(bool);
Console.WriteLine("typeof(bool) is {0}", t1);
int radius = 5; Type t2 = radius.GetType();
Console.WriteLine("radius.GetType() is {0}", t2);
Console.WriteLine("Area = {0}", radius * radius * Math.PI);
Console.WriteLine("The type of Area is {0}", (radius * radius * Math.PI).GetType());
Console.ReadKey();
-
表达式中的运算符按照运算符优先级(precedence)的特定顺序和结合性规则计算
-
同一类别中的运算符优先级相同
-
优先级和结合性都可以用括号控制
表达式的组成和书写规则
表达式的组成
- 表达式由操作数(变量、常量、函数)、运算符和圆括号按一定规则组成。
- 表达式通过运算后产生运算结果,运算结果的类型由操作数和运算符共同决定
表达式的书写规则
- 乘号不能省略,例如,a乘以b应写为a*b。
- 括号必须成对出现,而且只能使用圆括号;圆括号可以嵌套使用。
- 表达式从左到右在同一个基准上书写,无高低、大小区分
例子
int a = 1,b = 2,c = 3;
a += b++ + c;
Console.WriteLine(" a = {0}, b = {1}, c = {2}", a, b, c);
Console.WriteLine(" c >= b && b >= a 结果为: {0}", c >= b && b >= a);
Console.WriteLine(" a < b ? a++ : b++ 结果为: {0}", a < b ? a++ : b++);
Console.WriteLine(" a = {0}, b = {1}, c = {2}", a, b, c);
Console.WriteLine(" c += a > b ? a++ : b++ 结果为: {0}", c += a > b ? a++ : b++);
Console.WriteLine(" a = {0}, b = {1}, c = {2}", a, b, c);
a = 6, b = 3, c = 3
c >= b && b >= a 结果为: False
a < b ? a++ : b++ 结果为: 3
a = 6, b = 4, c = 3
c += a > b ? a++ : b++ 结果为: 9
a = 7, b = 4, c = 9