- 2
- 0
- 约1.48万字
- 约 18页
- 2016-08-10 发布于重庆
- 举报
C第5章
5. 变量
变量表示存储位置。每个变量都具有一个类型,它确定哪些值可以存储在该变量中。C# 是一种类型安全的语言,C# 编译器保证存储在变量中的值总是具有合适的类型。通过赋值或使用 ++ 和 -- 运算符可以更改变量的值。
在可以获取变量的值之前,变量必须已明确赋值(第 5.3 节)。
如下面的章节所述,变量是初始已赋值或初始未赋值。初始已赋值的变量有一个正确定义了的初始值,并且总是被视为已明确赋值。初始未赋值的变量没有初始值。为了使初始未赋值的变量在某个位置被视为已明确赋值,变量赋值必须发生在通向该位置的每个可能的执行路径中。
5.1 变量类别
C# 定义了七种变量类别:静态变量、实例变量、数组元素、值参数、引用参数、输出参数以及局部变量。后面的章节将介绍其中的每一种类别。
在下面的示例中,
class A
{
public static int x;
int y;
void F(int[] v, int a, ref int b, out int c) {
int i = 1;
c = a + b++;
}
}
x 是静态变量,y 是实例变量,v[0] 是数组元素,a 是值参数,b 是引用参数,c 是输出参数,i 是局部变量。
5.1.1 静态变量
用 static 修饰符声明的字段称为静态变量。静态变量在包含了它的那个类型的静态析构函数(第 10.11 节)执行之前就存在了,在关联的应用程序域终止时终止。
静态变量的初始值是该变量的类型的默认值(第 5.2 节)。
出于明确赋值检查的目的,静态变量被视为初始已赋值。
5.1.2 实例变量
未用 static 修饰符声明的字段称为实例变量。5.1.2.1 类中的实例变量
类的实例变量在创建该类的新实例时开始存在,在所有对该实例的引用都已终止,并且已执行了该实例的析构函数(若有)时终止。
类实例变量的初始值是该变量的类型的默认值(第 5.2 节)。
出于明确赋值检查的目的,类的实例变量被视为初始已赋值。
5.1.2.2 结构中的实例变量
结构的实例变量与它所属的结构变量具有完全相同的生存期。换言之,当结构类型的变量开始存在或停止存在时,该结构的实例变量也随之存在或消失。
结构的实例变量与包含它的结构变量具有相同的初始赋值状态。换言之,当结构变量本身被视为初始已赋值时,它的实例变量也被视为初始已赋值。而当结构变量被视为初始未赋值时,它的实例变量同样被视为未赋值。
5.1.3 数组元素
数组的元素在创建数组实例时开始存在,在没有对该数组实例的引用时停止存在。
每个数组元素的初始值都是其数组元素类型的默认值(第 5.2 节)。
出于明确赋值检查的目的,数组元素被视为初始已赋值。
5.1.4 值参数
未用 ref 或 out 修饰符声明的参数为值参数。
值参数在调用该参数所属的函数成员(方法、实例构造函数、访问器或运算符)(第 7.4 节)时开始存在,并用调用中给定的自变量的值初始化。当返回该函数成员时值参数停止存在。
出于明确赋值检查的目的,值参数被视为初始已赋值。
5.1.5 引用参数
用 ref 修饰符声明的参数是引用参数。
引用参数不创建新的存储位置。相反,引用参数表示的是那个在对该函数成员调用中被当作“自变量”的变量所表示的同一个存储位置。因此,引用参数的值总是与基础变量相同。
下面的明确赋值规则适用于引用参数。注意第 5.1.6 节中描述的输出参数的不同规则。
变量在可以作为引用参数在函数成员调用中传递之前,必须已明确赋值(第 5.3 节)。
在函数成员内部,引用参数被视为初始已赋值。
在结构类型的实例方法或实例访问器内部,this 关键字的行为与该结构类型的引用参数完全相同(第 7.5.7 节)。
5.1.6 输出参数
用 out 修饰符声明的参数是输出参数。
输出参数不创建新的存储位置。相反,输出参数表示的是那个在对该函数成员调用中被当作“自变量”的变量所表示的同一个存储位置。因此,输出参数的值总是与基础变量相同。
下面的明确赋值规则应用于输出参数。注意第 5.1.5 节中描述的引用参数的不同规则。
变量在可以作为输出参数在函数成员调用中传递之前不一定要明确赋值。
在正常完成函数成员调用之后,每个作为输出参数传递的变量都被认为在该执行路径中已赋值。
在函数成员内部,输出参数被视为初始未赋值。
函数成员的每个输出参数在该函数成员正常返回前都必须已明确赋值(第 5.3 节)。
在结构类型的实例构造函数内部,this 关键字的行为与结构类型的输出参数完全相同(第 7.5.7 节)。
5.1.7 局部变量
局部变量是通过局部变量声明来声明的,此声明可以出现在块、for 语句、switch 语句或 using
您可能关注的文档
- NCV6.0组织管理详细需求分析通则.doc
- NAT实例教程._-_Cisco_Learning_Network.ppt
- CAN总线技术在现代汽车上的应用与研究.doc
- 如何正确书写化学方程式的教学设计.doc
- Casefive第五章.doc
- NC多组织-组织管理概要需求.doc
- CATTI三笔经验分享谁说实务很难通过.docx
- catti真题,1份。.doc
- CAXA提供的机械制图的一些加工技术要求.doc
- 如何制造一条高的读书笔记.doc
- 2025-2026学年天津市和平区高三(上)期末数学试卷(含解析).pdf
- 2025-2026学年云南省楚雄州高三(上)期末数学试卷(含答案).pdf
- 2025-2026学年甘肃省天水市张家川实验中学高三(上)期末数学试卷(含答案).docx
- 2025-2026学年福建省厦门市松柏中学高二(上)期末数学试卷(含答案).docx
- 2025-2026学年广西钦州市高一(上)期末物理试卷(含答案).docx
- 2025-2026学年河北省邯郸市临漳县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省石家庄二十三中七年级(上)期末历史试卷(含答案).docx
- 2025-2026学年海南省五指山市九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省唐山市玉田县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省邢台市市区九年级(上)期末化学试卷(含答案).docx
原创力文档

文档评论(0)