1 运算符和表达式
运算符是一个符号,它表示 返回 单个结果的操作
操作数是指作为运算符输入的 数据元素,可以作为操作数的结构有:
- 字面量:源代码中键入的数字或字符串,表示一个指定类型的明确、固定的值
- 常量
- 变量
- 方法调用
- 元素访问器
- 其他表达式
表达式是运算符和操作数的字符串
1.1 字符字面量和字符串字面量
1.1.1 字符字面量
字符字面量有两个单引号内的字符组成,字符字面量的类型是 char
,字符字面量可以是下面任意一种:
- 单个字符
- 一个简单转义序列
- 一个十六进制转义序列
- 一个Unicode转义序列
1.1.2 常规字符串字面量
常规字符串字面量有双引号内的**字符系列**组成,类型是 string
1.1.3 逐字字符串字面量
逐字字符串字面量有双引号内的**字符系列**组成,且以一个 @
为前缀,在此的字符串无需转义,除了双引号,相邻的双引号组,被解释成单个双引号字符。eg:
string vst2 = @"it started, ""Four score and seven..."""
//打印出来是:it started, "Four score and seven..."
2 运算符
2.1 浅比较
对于大多数引用类型来说,比较它们的相等性,将只 比较它们的引用
2.2 深比较
string
类型是引用类型,但是它比较方式不同,比较字符串的相等性,将比较它的长度和内容(区分大小写),这称为深比较
与C和C++不同,在C#中数字不具有布尔意义
2.3 递增运算符和递减运算符
- 前置递增
++var
:变量的值加1并保存,返回变量新值 - 后置递增
var++
:变量的值加1并保存,返回变量旧值
2.4 用户定义的类型转换
转换分为 自定义转换 和 预定义的转换
这允许把用户定义类型的对象转换成某个其他类型
C#提供隐式转换和显式转换
- 隐式转换:如有转换必要,编译器会自动执行转换
- 显式转换:只能使用显式转换运算符时才执行转换
2.4.1 隐式转换
语法要点:
public
和static
修饰符是必须的- 命名
implicit operator
方法 - 紧接目标类型
- 最后紧接括号括起的源数据
eg:
class LimtiedInt
{
const int MaxValue = 100;
const int MinValue = 0;
public static implicit operator int(LimtiedInt li)
{
return li.TheValue;
}
public static implicit operator LimitedInt(int x)
{
LimitedInt li =new LimitedInt();
li.TheValue = x;
return li;
}
private int _theValue = 0;
public int TheValue
{
get { return _theValue;}
set
{
if (value < MinValue)
_theValue = 0;
else
_theValue = value>MaxValue ? MaxValue : value;
}
}
}
class Program
{
static void Main()
{
LimitedInt li = 500;
int value = li;
Console.WriteLine("li:{0},value:{1}", li.TheValue, value);
}
}
以上代码输出:
li: 100,value: 100
2.4.2 显式转换
显式转换语法要点(仅第二点与隐式转换不同):
public
和static
修饰符是必须的- 命名
explicit operator
方法 - 紧接目标类型
- 最后紧接括号括起的源数据
必须显式地运用 强制类型转换运算符(在一对圆括号内部,包含转换成的类型名称):
LimitedInt li = (LimitedInt) 500;
int value = (int) li;
2.4.3 运算符重载
不是所有的运算符都可以被重载只有下面的可以:
- 一元运算符:
+
,-
,!
,~
,++
,--
,true
,false
- 二元运算符:
+
,-
,/
,%
,*
,&
,|
,^
,<<
,>>
,==
,!=
,<
,>
,>=
,<=
3 语句
语句是描述某个类型或让程序执行某个动作的源代码指令。
空语句 仅有一个分号组成
3.1 do
循环
语法:
do
Statement
whild( TestExpr); // 分号必须
3.2 switch
语句
语法:
switch(TestExpr)
{
case ConstExpr1:
StatementList
break;
case ConstExprN:
StatementList
break;
default:
StatementList
break;
}
分支末尾必须为
break
语句或其它4种跳转语句,另四种是:
return
continue
goto
throw
3.3 using
语句
再进行一些诸如文件操作、数据库连接操作、网络资源操作等行为后,都需要显式地关闭这些行为,尽可能快地释放它们。
using
语句简化该过程并确保这些资源被适当地处置。资源 是指一个实现 System.IDisposable
接口的类或结构,使用资源的阶段:
- 分配资源
- 使用资源
- 处置资源
using (ResourceType Identifier = Expression) Statement
// 圆括号内代码 分配资源
// statement 是 使用资源
// using 隐式处置资源