《C#编程入门与应用》—​3.1.3 变量类型

举报
清华大学出版社 发表于 2019/10/12 11:06:44 2019/10/12
【摘要】 本节书摘来自清华大学出版社《C#编程入门与应用》一书中第三章,第3.1.3节,作者是李 鑫 祝惠娟。

3.1.3 变量类型

      C# 中有 7 种变量类型:静态变量、实例变量、数组元素、数值参数、引用参数、输出参 数和局部变量。

1.静态变量 

       静态变量通常使用static 关键字( 修饰 符 ) 来表示,它在程序编译通过后存在,在 关联的应用程序域终止时终止。静态变量 的初始值为此类型变量的默认值,为了方 便明确赋值检查,静态变量被认为是初始 化过的。 

       静态变量使用时有两种方法,在同一个 类中可以直接调用,在不同的类中需要通过 “类名 . 静态变量名”进行调用。 

 【例3-4】 

       下面通过案例演示静态变量的使用,步骤如下:

       01 创建Student 类, 在该类中声明 stuAge 变量,该变量是静态变量,变量值为 12。代码如下:

        class Student {   

                  public static int stuAge = 12; 

          }

       02 在同一个命名空间下创建Program 类,类中声明静态变量stuName,变量值为“徐 菲菲”,在 Main() 方法中分别调用两个静态 变量,代码如下:

image.png

       在上述Main() 方法中, 通过Student. stuAge调用Student类中声明的stuAge变量, 直接通过 stuName 调用当前类的静态变量。 

       03 编译并执行上述代码,最终的输出 内容如下:

             徐菲菲今年 12 岁了

2.实例变量

       实例变量与静态变量相反,是指没有使 用 static 关键字( 修饰符) 声明的变量,又可 以称为非静态变量或对象变量。

      (1) 类中的实例变量。 

       当创建某类的一个实例的时候,隶属于 该类的实例变量也被生成,当不再有关于这 个实例的引用而且实例的析构函数执行了以 后,此实例变量失效。类中实例变量的初始 值为这种类型变量的默认值。

(2) 结构体中的实例变量。  

       一个结构体中的实例变量与隶属于该结 构体的结构变量寿命相同。换句话说,结构 体中的实例变量和其中的其他变量被同时创 建,并且同时失效。而且该结构体中的实例 变量的初始赋值状态和其中的其余变量一致。 若一个结构体变量是被初始化过的,结构体 的实例变量也是如此;反过来说,如果一个 结构体变量是没有经过初始化的,则结构体 的实例变量也是没有经过初始化的。 

    【例3-5】 

       如下Program 类中声明的stuName 就是 一个实例变量,如果要使用,必须先实例化类, 再进行调用。代码如下:

image.png

image.png

       静态变量和实例变量是不同的,下面针 对这两种变量的不同点进行介绍。 

      ● 内存分配不同 静态变量在类加载时 就开始分配内存;而实例变量是在被 实例化后才会分配内存。 

      ● 生命周期不同 静态变量的生命周期 就是应用程序的生命周期;而实例变 量的生命周期取决于实例化类的存在 周期。

      ● 调用方式不同 静态变量在同一个类 中可以直接调用,在不同的类中通过 “类名. 静态变量名”调用;而实例变 量需要实例化,再通过“实例对象 . 变 量名”访问。 

      ● 共享方式不同 静态变量被所有的类 的实例对象共享;而实例变量不共享。 

      3.数组元素 

       当任意一个数组实例被创建时,这个数 组的元素也被同时创建,当不再有任何针对 这个数组实例的引用时,它的元素也就此失 效。数组中每个元素的初始值为该数组元素 类型的默认值。为了方便明确赋值检查,所 有的数组元素都会被认为是初始化的。 

     【例3-6】 

       声明StuScore() 方法, 向该方法中传 入 int 类型的数组,数组中的每个元素都是 整型变量,在 StuScore() 方法中为数组中的 元素赋值。score[0] 表示第1 个数组元素; score[1] 表示第 2 个数组元素,以此类推。代 码如下:

image.png

       4.数值参数 

       当一个不带有ref 或 out 修饰的参数被声 明时,通常称它为数值参数。当被隶属的函数 成员(method, constructor, accessor, operator) 调 用时,数值参数自动生成,同时被赋以调用中 的参数值。当函数成员返回后,数值参数失效。 为了方便明确赋值检查,所有的数值参数都 被认为是初始化过的。 

 【例3-7】 

       声明 GetName() 方法,向该方法传入一个 参数,该方法返回一个空字符串。在该方法中, 传入的参数telphone就是数值参数。代码如下:

           public string GetName(string telphone) {  

                return ""; 

            }

       5.引用参数  

       当一个带有ref修饰语的参数被声明时, 我们称其为引用参数。引用参数本身并不创 建新的存储空间。同时,引用参数指向函数 子句调用中作为参数给出的相关变量表征的 存储空间。这样,此形式参数的数值总是等 于它所指向的变量。

       引用参数的赋值规则如下:

       ● 在一个变量被传递给函数子句调用中 相关的引用参数之前,它自身必须被 明确赋值。

       ● 在函数子句界定的范围内,引用参数 被认为是初始化过的。

       6.输出参数 

      当一个带有out修饰语的参数被声明时, 我们称其为输出参数。输出参数本身并不创建新的存储空间。同时,输出参数指向函数 子句调用中作为参数给出的相关变量表征的 存储空间。这样,此输出参数的数值总是等 于它所指向的变量。 

      输出参数的赋值规则如下:

      ● 在一个变量被传递给函数子句调用中相 关的输出参数之前,它自身不需要被明 确地赋值。 

      ● 在函数子句调用中,每个传递给输出 参数的变量都认为在该执行路径中已 被赋值。 

      ● 在函数子句界定的范围内,输出参数 被认为是初始化过的。

      ● 在函数子句返回之前,每一个输出参 数都必须被明确地赋值。 

     【例3-8】 

      声明OutGetTotalSum() 方法,在该方法 中传入 4 个参数,其中 num1 和 num2 是引用 参数,totalSum 是输出参数。代码如下:

image.png

     7.局部变量 

       局部变量是由局部变量声明语句创建的,该语句可以在语句块、for 循环语句或者 switch 分支语句中出现。当控制权进入语句 块、for 循环语句或者 switch 分支语句时,其 中的相关局部变量被创建。当控制权离开语 句块、for 循环语句或者 switch 分支语句时, 其中的相关局部变量随即失效。

       局部变量不会被自动初始化,也就是说 它不会有默认值。为了方便明确赋值检查, 局部变量被认为是初始化过的。局部变量声 明语句可以包括一个变量初始化器。

       局部变量又被称为内部变量,在一个局 部变量的有效范围中,在它被声明之前,所 有关于它的引用都被认为是错误的。 

    【例3-9】 

       在 Main() 方法中声明局部变量,通过 while 语句进行循环,同时在while 语句中 声明total 变量,变量值是i++ 的结果。代码 如下:

image.png


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。