变量
变量是C# 语言中最为基本的概念之一,它表示存储位置。
每一个变量的值由其类型确定。本章将讲解C# 语言中各
种变量,主要介绍以下知识点。
变量概述;
变量分类;
变量赋值;
使用值参数传递数据;
使用ref 参数传递数据;
使用out 参数传递数据;
变量转换。
在C# 语言中,变量表示存储位置。每一个变量都具有一个
类型,该类型确定变量存储的内容。对于两个变量而言
,如果它们的值相同,但是类型不同,那么该变量存储
的值是不相同的。
声明一个变量之后,该变量可能具有初始值,也可能不具有
初始值。如果变量具有初始值,则称之为初始已赋值(
initially assigned )。如果变量不具有初始值,则称之为
初始未赋值(initially unassigned )。
如果是第一次明确指定变量的值,则称之为变量的初始化。
如果是初始未赋值变量,必须经过初始化之后,才能够
被使用。
C# 语言定义了7 种不同类别的变量:静态变量、实例变量、
数组元素、值参数、引用参数、输出参数和局部变量。
本小节将详细介绍这7 种类别的变量。
静态变量(static variable )是指使用static 修饰符声明的变
量。静态变量总是在包含了它的那个类型的静态构造函
数(第8 章)执行之前就存在了,在关联的应用程序域终
止时终止。
实例变量(instance variable )和静态变量相对应。实例变
量是指未使用static 修饰符声明的变量。实例变量包括两
种类型的变量:类的实例变量和结构的实例变量。
1 .类的实例变量
2 .结构的实例变量
对于一个函数成员而言,它都存在一个参数列表(紧跟在函
数成员名称之后的小括弧中)。当然,该参数列表可以
是空,也可以包含一个或多个参数,多个参数之间使用
逗号(, )分隔。
在声明参数时,可以不使用修饰符,也可以使用ref 或out 修
饰符。值参数(value parameter )是指未使用ref 或out 修
饰符声明的参数。
引用参数(reference parameter )是值使用ref 修饰符声明的
参数。引用参数和值参数最大的一个区别在于:在函数
成员中,函数成员为值参数分配了一个新的存储位置,
而引用参数仍然使用其基础变量的存储位置。即引用参
数和其基础变量操作了同一个变量,而值参数和其基础
变量是操作了两个不同变量,而且不互相影响。
输出参数(output parameter )是值使用out 修饰符声明的参
数。输出参数和值参数最大的一个区别在于:在函数成
员中,函数成员为值参数分配了一个新的存储位置;输
出参数不创建新的存储位置,而是使用基础变量的存储
位置。因此,输出参数的值总是与基础变量相同。
简而言之,基础变量实际上是分配了一个存储位置,在调用
包含out 参数的函数成员时,该函数成员将在这一个存储
位置存储新的值,并修改基础变量的值。
数组元素是指作为函数成员参数的数组的元素,
它总是在创建数组实例时开始存在,在没有对该数组实
例的引用时停止存在。每个数组元素的初始值都是其数
组元素类型的默认值。
变量赋值是指给变量指定某一个明确的值,如“int i =
2008;” 语句在声明i 变量的同时给该变量赋值为2008 。在
函数成员可执行代码中的给定位置,如果编译器可确定
变量已自动初始化或已成为至少一个赋值的目标,则称
该变量已明确赋值(definitely assigned )。
转换(conversion )使一种类型的表达式可以被视为另一种
类型。变量转换(variable conversion )使一种类型的变
量可以被视为另一种类型。转换可以分为隐式转换(
implicit conversion )和显式转换(explicit conversion )
。如果在转换时,需要添加强制转换的类型,那么该转
换为显式转换。
隐式转换是指不需要添加强制转换的类型的转换。常用的隐
式转换包括以下几种。
标识转换,在同一类型内进行转换,它能够使已具有所
需类型的实体可被认为是可转换的。
隐式数值转换,如从int 类型转换为long 类型等。
隐式枚举转换,将数值转换为枚举类型。
隐式引用转换,如引用类型转换为object 类型等。
装箱转换,如值类型转换为object 类型等。
隐式常量表达式转换,如将int 类型转换为uint 类型等。
用户定义的隐式转换,包括以下3 个步骤:一个标准的隐
式转换;执行用户定义的隐式转换运算符;另一个标准
的隐式转换。
显式转换是指需要添加强制转换的类型的转换。常用的显式
转换包括以下几种。
显式数值转换,如long 类型转换为int 类型等。
显式枚举转换,如int 类型转换为枚举类型等。
显式引用转换,如object 类型转换为引用类型等。
显式接口转换,如object 类型转换为接口类型等。
拆箱转换,如object 类型转换为值类型等。
用户定义的显式转换, 包括以下3 个步骤:一个标准的隐
式转换;执行用户定义的显式转换运算符;另一个标准
的隐式转换。
表达式是一个由操作数(operand )和运算符(operator )
构成的序列。运算符指定操作数的运算规则,即指示对
表达式中的操作数进行什么样的运算。
在C# 语言中,可以把表达式分为以下9 种类别,如下所示。
表达式类型 说明
值 每一个值都有关联的类型。
变量 每一个变量都有关联的类型。如果该变量存在了相关的类型,
则称该变量为已声明类型的变量。
命名空间 C#程序是利用命名空间组织起来的。
类型 指定变量数据的存储方式和操作方法。
方法组 表示一组方法,并可以通过实例调用方法组中的方法。
属性访问 每个属性访问都有关联的类型,即该属性的类型。
事件访问 每个事件访问都有关联的类型,即该事件的类型。
索引器访问 每个索引器访问都有关联的类型,即该索引器的元素类型。
Nothing 出现在调用一个具有void返回类型的方法时。
this 关键字可以用来引用类的当前实例,还可以用作扩展方
法的第一个参数的修饰符。this 关键字存在以下3 种常用
用法。
1 .限定名称相同的成员
2 .将对象本身作为参数
3 .声明索引器
new 关键字可以作为new 运算符、new 修饰符或new 约束。
1 .new 运算符
2 .new 修饰符
3 .new 约束
运算符是表达式很重要的一部分,它指示对表达式中的操作
数进行什么样的运算,如+ 、- 、* 、/ 、% 等。根据运算符
所需操作数的个数,可以把运算符分为以下3 类。本节介
绍运算符的知识点。
一元运算符,只带有一个操作数并使用前缀表示法(如--
x )或后缀表示法(如x++ ),如++ 、-- 等运算符。
二元运算符,带有两个操作数并且全都使用中缀表示法
(如x+y ),如+ 、- 、* 、/ 等运算符。
三元运算符,带有3 个操作数并使用中缀表示法,如?: 运
算符。
算术表达式是最为常见的一种表达式。它由操作数和运算符
组成,而且这些运算符之间是存在一定优先级的,如* 运
算符的优先级就大于+ 运算符的优先级。C# 语言中的运算
符一样,也存在优先级。在计算表达式的值时,也必须
遵循运算符的优先级的规则。
+ 、- 、! 、~ 、++x 、--x 和(T)x 被称为一元运算符。其中,
(T)x 运算符为强制转换运算符,它可以将一种类型转换为
另外一种类型。+ 、- 和~ 运算符分别表示一元加运算、一
元减运算和按位求补运算。下面详细介绍! 、++x 、--x 和
(T)x 运算符的使用方法。
1 .++ 运算符
2 .-- 运算符
3 .! 运算符
4 .(T)x 运算符
* 、/ 、% 、+ 和– 运算符称为算术运算符,它们分别表示乘法
、除法、余数、加法和减法运算。语法如下。
left expression operator right expression
left expression 和right expression 分别表示左操作数和右操作
数,operator 表示运算符,可以为* 、/ 、% 、+ 和– 。
& 、^ 和| 运算符称为逻辑运算符。& 运算符计算两个操作数
的按位逻辑AND ,| 运算符计算两个操作数的按位逻辑OR
,^ 运算符计算两个操作数的按位逻辑XOR 。语法如下。
left expression operator right expression
left expression 和right expression 分别表示左操作数和右操作
数,operator 表示运算符,可以为& 、^ 和| 。
?: 运算符称为条件运算符,它是C# 语言中唯一的一个三元运
算符,语法如下。
条件表达式 ? resulta : resultb;
该表达式首先计算条件表达式的值。如果条件表达式的值为
真,则resulta 的值,并成为运算结果。否则计算resultb
,并成为运算结果。
&& 和|| 运算符称为条件逻辑运算符。&& 运算符为逻辑与运
算符,它计算左右操作数的逻辑与。|| 运算符为逻辑或运
算符,它计算左右操作数的逻辑或。语法如下。
left expression operator right expression
left expression 和right expression 分别表示左操作数和右操作
数,operator 表示运算符,可以为&& 和|| 。
<< 和>> 运算符被称为移位运算符。<< 运算符表示左移位,
>> 运算符表示右移位。语法如下:
erpression operator count;
expression 表示被移位的表达式,count 表示移动的位数,
operator 表示运算符,可以为<< 和>> 。
== 、!= 、< 、> 、<= 、>= 、is 和as 运算符称为关系和类型测试运算
符。语法如下:
left expression operator right expression
left expression 和right expression 分别表示左操作数和右操作数,
operator 表示运算符,可以为== 、!= 、< 、> 、<= 、>= 、is 和as
。其中,== 、!= 、< 、> 、<= 和>= 运算符为比较运算符,它们
的具体计算方法如下:
x == y ,如果x 等于y ,则为true ,否则为false 。
x != y ,如果x 不等于y ,则为true ,否则为false 。
x < y ,如果x 小于y ,则为true ,否则为false 。
x > y ,如果x 大于y ,则为true ,否则为false 。
x <= y ,如果x 小于等于y ,则为true ,否则为false 。
x >= y ,如果x 大于等于y ,则为true ,否则为false 。
= 、*= 、/= 、%= 、+= 、-= 、<<= 、>>= 、&= 、^= 和|= 运算符
被称为赋值运算符,它们能够为变量、属性、事件或索
引器元素赋新值。语法如下:
left expression operator right expression
left expression 和right expression 分别表示左操作数和右操作
数,operator 表示运算符,如= 、*= 、/= 等。
变量是C# 语言中最为基本的概念之一,它表示存储位置。
每一个变量的值由其类型确定。本章将讲解C# 语言中各
种变量,主要介绍以下知识点。
变量概述;
变量分类;
变量赋值;
使用值参数传递数据;
使用ref 参数传递数据;
使用out 参数传递数据;
变量转换。
变量概述
在C# 语言中,变量表示存储位置。每一个变量都具有一个
类型,该类型确定变量存储的内容。对于两个变量而言
,如果它们的值相同,但是类型不同,那么该变量存储
的值是不相同的。
声明一个变量之后,该变量可能具有初始值,也可能不具有
初始值。如果变量具有初始值,则称之为初始已赋值(
initially assigned )。如果变量不具有初始值,则称之为
初始未赋值(initially unassigned )。
如果是第一次明确指定变量的值,则称之为变量的初始化。
如果是初始未赋值变量,必须经过初始化之后,才能够
被使用。
变量分类
C# 语言定义了7 种不同类别的变量:静态变量、实例变量、
数组元素、值参数、引用参数、输出参数和局部变量。
本小节将详细介绍这7 种类别的变量。
静态变量
静态变量(static variable )是指使用static 修饰符声明的变
量。静态变量总是在包含了它的那个类型的静态构造函
数(第8 章)执行之前就存在了,在关联的应用程序域终
止时终止。
实例变量
实例变量(instance variable )和静态变量相对应。实例变
量是指未使用static 修饰符声明的变量。实例变量包括两
种类型的变量:类的实例变量和结构的实例变量。
1 .类的实例变量
2 .结构的实例变量
局部变量
顾名思义,局部变量(local variable )是在应用程序的某一
段时间内存在。局部变量可以声明在块(block )、for 语
句、switch 语句和using 语句中,即局部变量是通过
“local-variable-declaration” 来声明的。
段时间内存在。局部变量可以声明在块(block )、for 语
句、switch 语句和using 语句中,即局部变量是通过
“local-variable-declaration” 来声明的。
值参数
对于一个函数成员而言,它都存在一个参数列表(紧跟在函
数成员名称之后的小括弧中)。当然,该参数列表可以
是空,也可以包含一个或多个参数,多个参数之间使用
逗号(, )分隔。
在声明参数时,可以不使用修饰符,也可以使用ref 或out 修
饰符。值参数(value parameter )是指未使用ref 或out 修
饰符声明的参数。
ref 参数
引用参数(reference parameter )是值使用ref 修饰符声明的
参数。引用参数和值参数最大的一个区别在于:在函数
成员中,函数成员为值参数分配了一个新的存储位置,
而引用参数仍然使用其基础变量的存储位置。即引用参
数和其基础变量操作了同一个变量,而值参数和其基础
变量是操作了两个不同变量,而且不互相影响。
out 参数
输出参数(output parameter )是值使用out 修饰符声明的参
数。输出参数和值参数最大的一个区别在于:在函数成
员中,函数成员为值参数分配了一个新的存储位置;输
出参数不创建新的存储位置,而是使用基础变量的存储
位置。因此,输出参数的值总是与基础变量相同。
简而言之,基础变量实际上是分配了一个存储位置,在调用
包含out 参数的函数成员时,该函数成员将在这一个存储
位置存储新的值,并修改基础变量的值。
数组元素
数组元素是指作为函数成员参数的数组的元素,
它总是在创建数组实例时开始存在,在没有对该数组实
例的引用时停止存在。每个数组元素的初始值都是其数
组元素类型的默认值。
变量赋值
变量赋值是指给变量指定某一个明确的值,如“int i =
2008;” 语句在声明i 变量的同时给该变量赋值为2008 。在
函数成员可执行代码中的给定位置,如果编译器可确定
变量已自动初始化或已成为至少一个赋值的目标,则称
该变量已明确赋值(definitely assigned )。
变量转换
转换(conversion )使一种类型的表达式可以被视为另一种
类型。变量转换(variable conversion )使一种类型的变
量可以被视为另一种类型。转换可以分为隐式转换(
implicit conversion )和显式转换(explicit conversion )
。如果在转换时,需要添加强制转换的类型,那么该转
换为显式转换。
隐式转换
隐式转换是指不需要添加强制转换的类型的转换。常用的隐
式转换包括以下几种。
标识转换,在同一类型内进行转换,它能够使已具有所
需类型的实体可被认为是可转换的。
隐式数值转换,如从int 类型转换为long 类型等。
隐式枚举转换,将数值转换为枚举类型。
隐式引用转换,如引用类型转换为object 类型等。
装箱转换,如值类型转换为object 类型等。
隐式常量表达式转换,如将int 类型转换为uint 类型等。
用户定义的隐式转换,包括以下3 个步骤:一个标准的隐
式转换;执行用户定义的隐式转换运算符;另一个标准
的隐式转换。
显示转换
显式转换是指需要添加强制转换的类型的转换。常用的显式
转换包括以下几种。
显式数值转换,如long 类型转换为int 类型等。
显式枚举转换,如int 类型转换为枚举类型等。
显式引用转换,如object 类型转换为引用类型等。
显式接口转换,如object 类型转换为接口类型等。
拆箱转换,如object 类型转换为值类型等。
用户定义的显式转换, 包括以下3 个步骤:一个标准的隐
式转换;执行用户定义的显式转换运算符;另一个标准
的隐式转换。
表达式和运算符
表达式是C# 语言组成的重要元素之一,它是可以计算且结
果为单个值、对象、方法或命名空间的代码片段。表达
式也可以包含文本值、方法调用、运算符及其操作数,
或简单名称。简单的说,表达式是一个由操作数和运算
符组成的序列。本章将讲解C# 语言中的表达式和运算符
,主要介绍以下知识点。
表达式分类;
this 、base 和new 关键字;
运算符;
运算检查;
运算符重载。
表达式是C# 语言组成的重要元素之一,它是可以计算且结
果为单个值、对象、方法或命名空间的代码片段。表达
式也可以包含文本值、方法调用、运算符及其操作数,
或简单名称。简单的说,表达式是一个由操作数和运算
符组成的序列。本章将讲解C# 语言中的表达式和运算符
,主要介绍以下知识点。
表达式分类;
this 、base 和new 关键字;
运算符;
运算检查;
运算符重载。
表达式
表达式是一个由操作数(operand )和运算符(operator )
构成的序列。运算符指定操作数的运算规则,即指示对
表达式中的操作数进行什么样的运算。
表达式分类
在C# 语言中,可以把表达式分为以下9 种类别,如下所示。
表达式类型 说明
值 每一个值都有关联的类型。
变量 每一个变量都有关联的类型。如果该变量存在了相关的类型,
则称该变量为已声明类型的变量。
命名空间 C#程序是利用命名空间组织起来的。
类型 指定变量数据的存储方式和操作方法。
方法组 表示一组方法,并可以通过实例调用方法组中的方法。
属性访问 每个属性访问都有关联的类型,即该属性的类型。
事件访问 每个事件访问都有关联的类型,即该事件的类型。
索引器访问 每个索引器访问都有关联的类型,即该索引器的元素类型。
Nothing 出现在调用一个具有void返回类型的方法时。
this 关键字
this 关键字可以用来引用类的当前实例,还可以用作扩展方
法的第一个参数的修饰符。this 关键字存在以下3 种常用
用法。
1 .限定名称相同的成员
2 .将对象本身作为参数
3 .声明索引器
base 关键字
base 关键字用于从派生类中访问基类的成员,主要存在以下
2 种用法。
调用基类上已被其他方法重写的方法。
指定创建派生类实例时应调用的基类构造函数。
base 关键字之后一般跟着“.” 标记和一个标识符或一个用方
括号括起来的表达式列表。
2 种用法。
调用基类上已被其他方法重写的方法。
指定创建派生类实例时应调用的基类构造函数。
base 关键字之后一般跟着“.” 标记和一个标识符或一个用方
括号括起来的表达式列表。
new 关键字
new 关键字可以作为new 运算符、new 修饰符或new 约束。
1 .new 运算符
2 .new 修饰符
3 .new 约束
运算符
运算符是表达式很重要的一部分,它指示对表达式中的操作
数进行什么样的运算,如+ 、- 、* 、/ 、% 等。根据运算符
所需操作数的个数,可以把运算符分为以下3 类。本节介
绍运算符的知识点。
一元运算符,只带有一个操作数并使用前缀表示法(如--
x )或后缀表示法(如x++ ),如++ 、-- 等运算符。
二元运算符,带有两个操作数并且全都使用中缀表示法
(如x+y ),如+ 、- 、* 、/ 等运算符。
三元运算符,带有3 个操作数并使用中缀表示法,如?: 运
算符。
运算符优先级
算术表达式是最为常见的一种表达式。它由操作数和运算符
组成,而且这些运算符之间是存在一定优先级的,如* 运
算符的优先级就大于+ 运算符的优先级。C# 语言中的运算
符一样,也存在优先级。在计算表达式的值时,也必须
遵循运算符的优先级的规则。
一元运算符
+ 、- 、! 、~ 、++x 、--x 和(T)x 被称为一元运算符。其中,
(T)x 运算符为强制转换运算符,它可以将一种类型转换为
另外一种类型。+ 、- 和~ 运算符分别表示一元加运算、一
元减运算和按位求补运算。下面详细介绍! 、++x 、--x 和
(T)x 运算符的使用方法。
1 .++ 运算符
2 .-- 运算符
3 .! 运算符
4 .(T)x 运算符
算术运算符
* 、/ 、% 、+ 和– 运算符称为算术运算符,它们分别表示乘法
、除法、余数、加法和减法运算。语法如下。
left expression operator right expression
left expression 和right expression 分别表示左操作数和右操作
数,operator 表示运算符,可以为* 、/ 、% 、+ 和– 。
逻辑运算符
& 、^ 和| 运算符称为逻辑运算符。& 运算符计算两个操作数
的按位逻辑AND ,| 运算符计算两个操作数的按位逻辑OR
,^ 运算符计算两个操作数的按位逻辑XOR 。语法如下。
left expression operator right expression
left expression 和right expression 分别表示左操作数和右操作
数,operator 表示运算符,可以为& 、^ 和| 。
条件运算符
?: 运算符称为条件运算符,它是C# 语言中唯一的一个三元运
算符,语法如下。
条件表达式 ? resulta : resultb;
该表达式首先计算条件表达式的值。如果条件表达式的值为
真,则resulta 的值,并成为运算结果。否则计算resultb
,并成为运算结果。
条件逻辑运算符
&& 和|| 运算符称为条件逻辑运算符。&& 运算符为逻辑与运
算符,它计算左右操作数的逻辑与。|| 运算符为逻辑或运
算符,它计算左右操作数的逻辑或。语法如下。
left expression operator right expression
left expression 和right expression 分别表示左操作数和右操作
数,operator 表示运算符,可以为&& 和|| 。
移位运算符
<< 和>> 运算符被称为移位运算符。<< 运算符表示左移位,
>> 运算符表示右移位。语法如下:
erpression operator count;
expression 表示被移位的表达式,count 表示移动的位数,
operator 表示运算符,可以为<< 和>> 。
关系和类型测试运算符
== 、!= 、< 、> 、<= 、>= 、is 和as 运算符称为关系和类型测试运算
符。语法如下:
left expression operator right expression
left expression 和right expression 分别表示左操作数和右操作数,
operator 表示运算符,可以为== 、!= 、< 、> 、<= 、>= 、is 和as
。其中,== 、!= 、< 、> 、<= 和>= 运算符为比较运算符,它们
的具体计算方法如下:
x == y ,如果x 等于y ,则为true ,否则为false 。
x != y ,如果x 不等于y ,则为true ,否则为false 。
x < y ,如果x 小于y ,则为true ,否则为false 。
x > y ,如果x 大于y ,则为true ,否则为false 。
x <= y ,如果x 小于等于y ,则为true ,否则为false 。
x >= y ,如果x 大于等于y ,则为true ,否则为false 。
赋值运算符
= 、*= 、/= 、%= 、+= 、-= 、<<= 、>>= 、&= 、^= 和|= 运算符
被称为赋值运算符,它们能够为变量、属性、事件或索
引器元素赋新值。语法如下:
left expression operator right expression
left expression 和right expression 分别表示左操作数和右操作
数,operator 表示运算符,如= 、*= 、/= 等。