当前位置: 首页 > web >正文

C# 方法(局部变量和局部常量)

本章内容:
方法的结构
方法体内部的代码执行
局部变量
局部常量
控制流
方法调用
返回值
返回语句和void方法
局部函数
参数
值参数
引用参数
引用类型作为值参数和引用参数
输出参数
参数数组
参数类型总结
方法重载
命名参数
可选参数
栈帧
递归

局部变量

和第5章介绍的字段一样,局部变量也保存数据。字段通常保存和对象状态有关的数据,而创
建局部变量经常是用于保存局部的或临时的计算数据。表6-1对比了局部变量和实例字段的差别。
下面这行代码展示了局部变量声明的语法。可选的初始化语句由等号和用于初始化变量的值
组成。

下面这行代码展示了局部变量声明的语法。可选的初始化语句由等号和用于初始化变量的值
组成。

image

下面的示例展示了两个局部变量的声明和使用。第一个是int类型变量,第二个是SomeClass
类型变量。

static void Main()
{int myInt=15;SomeClass sc=new SomeClass();...
}

对比实例字段昶局部变量

类型推断和var关键字

如果观察下面的代码,你会发现在声明的开始部分提供类型名时,你提供的是编译器能从初
始化语句的右边推断出来的信息。
在第一个变量声明中,编译器能推断出15是int型。
在第二个声明中,右边的对象创建表达式返回了一个MyExcellentClass类型的对象
所以在两种情况中,在声明的开始部分包括显式的类型名是多余的。

static void Main()
{int total=15;MyExcellentClass mec=new MyExcellentClass();...
}

为了避免这种冗余,可以在变量声明的开始部分的显式类型名的位置使用新的关键字var,

static void Main()
{//var关键字var total=15;var mec=new MyExcellentClass();...
}

var关键字并不是表示特殊变量。它只是句法上的速记,表示任何可以从初始化语句的右边推
断出的类型。在第一个声明中,它是int的速记;在第二个声明中,它是MyExcellentClass的速记。
前文中使用显式类型名的代码片段和使用var关键字的代码片段在语义上是等价的。

使用var关键字有一些重要的条件:
只能用于局部变量,不能用于字段;
只能在变量声明中包含初始化时使用;
一旦编译器推断出变量的类型,它就是固定且不能更改的。

说明 var关字不像JavaScript的var那样可以引用不同的类型。它是从等号右边推断出的实
际类型的速记。var关撻字并不改变C#的强类型性质

嵌套块中的局部变量

方法体内部可以嵌套其他的块。
可以有任意数量的块,并且它们既可以是顺序的也可以是嵌套的。块可以嵌套到任何级别。

局部变量可以在嵌套块的内部声明,并且和所有的局部变量一样,它们的生存期和可见
性仅限于声明它们的块及其内嵌块。
图6-3阐明了两个局部变量的生存期,展示了代码和栈的状态。箭头标出了刚执行过的行。
变量var1声明在方法体中,在嵌套块之前。
变量var2声明在嵌套块内部。它从被声明那一刻开始存在,直到声明它的那个块的尾部
结束。
当控制传出嵌套块时,它的局部变量从栈中弹出。

局部变量的生存期

说明 在C和C++中,可以先声明一个局部更量,然后在嵌套块中声明另一个名称相同的局部
变量。在内部范围,内部称掩盖了外部名称。然而,在c#中不管嵌套级别如何,都不
能在第一个称的有效范围内声明另一个同名的局部变量

局部常量

局部常量很像局部变量,只是一旦被初始化,它的值就不能改变了。如同局部变量,局部常
量必须声明在块的内部。
常量的两个最重要的特征如下。
在声明时必须初始化。
在声明后不能改变。
常量的核心声明如下所示。

image
语法与字段或变量的声明相同,只有如下两点不同。
在类型之前增加关键字const。
必须有初始化语句。初始化值必须在编译期决定,通常是一个预定义简单类型或由其组
成的表达式。它还可以是null引用,但它不能是某对象的引用,因为对象的引用是在运
行时决定的。

说明 关键字const不是修饰符,而是核心声明的一部分。它必须直接放在类型的前面。

就像局部变量,局部常量声明在方法体或代码块里,并在声明它的块结束的地方失效。例如,
在下面的代码中,类型为内嵌类型double的局部常量PI在方法DisplayRadii结束后失效。

void DisplayRadii()
{const double PI=3.1416; //声明局部常量for(int radius=1;radius<=5;radius++){double area=radius*radius*PI;//读取局部常量Console.WriteLine($"Radius:{radius},Area:{area}");}}
http://www.xdnf.cn/news/3610.html

相关文章:

  • Java 自旋锁:实现机制与优化策略
  • 软件性能测试报告:办公软件性能如何满足日常工作需求?
  • 第三章 权限维持-linux权限维持-隐藏
  • Wireshark网络抓包工具基础使用教程
  • 在 Python 中,以双下划线开头和结尾的函数(如 `__str__`、`__sub__` 等)
  • C++ unordered_set unordered_map
  • k8s3部署
  • 数字智慧方案5970丨智慧农业大数据服务建设方案(69页PPT)(文末有下载方式)
  • 使用huggingface_hub需要注意的事项
  • VBA快速合并多列单元格
  • 英伟达黄仁勋推荐的深度学习教程
  • Langchain,为何要名为langchian?
  • C语言 指针(3)
  • QT6(31)4.5常用按钮组件:Button,以及例题实现,如何为程序引入图片资源文件,本篇只包括例题程序的界面搭建
  • 树与二叉树完全解析:从基础到应用
  • 使用 Helm 在 EKS 上管理多个 Traefik Ingress 控制器和 ALB 的流量
  • 前端应用开发技术历程的简要概览
  • 第 5 篇:红黑树:工程实践中的平衡大师
  • 如何提升自我情绪管理的能力?
  • cpper 转 java
  • 现代健康养生全攻略
  • 4.2 math模块
  • 镜像和容器的深度介绍和关系
  • kaggle人工智能竞赛:通过声纹识别生物种类
  • DiT:文档图像Transformer 的自监督预训练
  • 数据结构之平衡二叉树
  • Linux 常用命令合集
  • 文献阅读篇#7:5月一区好文阅读,BFA-YOLO,用于建筑信息建模!(下)
  • 同构字符串(简单)
  • LeetCode 热题 100:普通数组