【C#基础】C# 变量和常量的使用
序号 | 系列文章 |
---|---|
1 | 【C#基础】C# 程序通用结构总结 |
2 | 【C#基础】C# 程序基础语法解析 |
3 | 【C#基础】C# 数据类型总结 |
文章目录
- 前言
- 一. 变量(variable)
- 1,变量定义及初始化
- 2,变量的类别
- 3,接收输出变量
- 二. 常量(constant)
- 1,常量的定义及初始化
- 2,常见的常量类型
- 结语
前言
😄大家好,我是writer桑,前面一章已经学习了 C# 的数据类型,那本章就开始学习C# 程序中变量和常量的使用,希望看完大家能够有所收获,感谢支持!
一. 变量(variable)
变量用来存储信息,而变量名就是一个供程序操作存储区的名字。每个变量都有一个特定的类型,类型决定了变量内存的大小和布局, 变量的值存储在内存中,在允许的范围内可以对变量进行一系列的操作。
1,变量定义及初始化
C# 变量定义的语法: <data_type> <variable_name>;
- data_type 也即变量的类型,这里必须是一个合法的 C# 数据类型 。
- variable_name 表示变量名称,通过赋值将数据和可描述的变量名连接起来,同时变量的声明必须是有效的 C# 标识符。
一些有效的变量定义示例代码:
// 整数、字符、浮点数、字符串类型的定义;
int i, j, k;
char c, ch;
float f, salary;
string s;
变量初始化赋值语法:<data_type> <variable_name> = value;
- 其中 value 表示常量表达式,使用等号将初始值和变量名连接
- 对于在获取变量的值之前,都需要对该变量进行明确赋值,输出未赋值的变量时编译器会报错误。
- 变量在定义时分为初始赋值或者初始未赋值,笔者建议声明变量时进行赋值,详细的理由请查看第12条建议;
我们可以在变量定义时进行初始化:
// 定义变量并初始化
int i = 11;
char c = 'A';
float f = 1.1f;
string s = "hello,world";
2,变量的类别
C # 定义了七种类型的变量:静态变量、实例变量、数组元素、值参数、引用参数、输出参数和局部变量。 下面分别介绍其中每个类别。
代码理解:
class Example
{public static int x;int y;void ExampleMethod(int[] v, int a, ref int b, out int c){int i = 1;c = a + b++;}
}
x 是静态变量, y 是实例变量, v[0] 是数组元素,a 是值参数, b 是引用参数,c 是输出参数, i 是局部变量。
静态变量:
在 C# 程序中使用 static 关键字声明的字段为静态变量,静态变量它不需要实例化对象来引用,可以直接使用类名来引用。静态变量的默认值是变量类型的默认值0, 同时静态变量随着所属应用程序的结束而停止存在。
实例变量:
没有用 static 关键字声明的字段为实例变量,与静态变量不同的是实例变量它必须创建类对象才可以通过对象来引用变量。同时实例变量的初始值为变量类型的默认值0。
数组元素:
一组具有同一属性的数据就称为数组,是最常见的数据结构之一。当创建数组实例时,数组的元素就已存在, 数组元素初始值都是默认值0。在没有对该数组实例的引用时停止存在;
值参数:
没有使用 ref 或 out 关键字修饰的参数为值参数, 值参数所属的函数成员 (方法、实例构造函数、访问器或运算符) 或匿名函数在开始调用时而存在并进行初始化值,当函数成员或匿名函数返回时值参数就停止存在。
引用参数:
使用修饰符 ref 声明的参数为引用参数,引用参数不会创建新的存储空间,相反,引用参数与所属函数成员或匿名函数调用中的参数的变量表示相同的存储位置。
输出参数:
使用修饰符 out 声明的参数为输出参数, 同样输出参数不会创建新的存储空间, 相反,输出参数与函数成员或委托调用中的参数有着相同存储位置。 因此,输出参数的值始终与基础变量相同。
局部变量:
顾名思义局部变量就是只在局部的“代码块”内有效的变量,局部变量经常出现在 for 语句、if 语句或 using 语句等等。局部变量的生存期是程序执行的一部分,实际生存期取决于程序的具体实现。
3,接收输出变量
在 C# 程序中可以使用 System 命名空间中 Console 类的 Readline 方法 和 WriteLine 方法实现接收变量并输出。
- Readline 方法用于接收用户输入的一行数据并转换为 string 字符串类型输出
- WriteLine 方法将指定的 value 参数变量输出
以下面程序的实现为示例:
using System;class Program
{static void Main(string[] args){Console.WriteLine("请问您喜欢什么编程语言?");string language = Console.ReadLine();Console.WriteLine($"我也喜欢用{language}"); // 我也喜欢用C#Console.ReadKey();}
}
二. 常量(constant)
常量是不可变的值,在编译时是已知的,在程序的生命周期内不会改变。 常量使用 const 修饰符声明。 仅 C# 内置类型(不包括 System.Object)可声明为 const。 用户定义的类型(包括类、结构和数组)不能为 const。 同时也可以使用 readonly 修饰符创建在运行时一次性(例如在构造函数中)初始化的类、结构或数组,此后不能更改。
1,常量的定义及初始化
常量定义的语法: const <data_type> <constant_name> = value; 或 readonly <data_type> <constant_name> = value;
- 与变量不同,常量在声明时必须初始化赋值
- data_type 表示数据类型,constant_name 表示常量名称, value 表示常量表达式
- C# 程序中常量分为编译期的常量 const 和运行期的常量 readonly
- 笔者建议优先考虑 readonly 关键字来声明常量,详细的理由请查看第2条建议
如何在 C# 中定义常量示例程序:
static class Constants
{public const double Pi = 3.14159;public const int SpeedOfLight = 300000;
}class Program
{static void Main(){double radius = 5.3;double area = Constants.Pi * (radius * radius);int secsFromSun = 149476000 / Constants.SpeedOfLight; Console.WriteLine(secsFromSun); // 498}
}
- 通常使用常量为特殊值且提供有意义的名称, 比如 Pi 和 SpeedOfLight 等常量。
- 常量的输出与变量相同, 使用 Console 类的 WriteLine 方法。
- 使用类名限定符 (示例代码的 static) 有助于确保你和使用该常量的其他人了解它是常量,并且不能通过实例化对象来修改。 (提高可读性)
2,常见的常量类型
整数常量:
整数常量可以是十进制、二进制、八进制或十六进制的常量, 其中前缀的使用:
- 十进制:不使用任何前缀(可以使用U 和 L 分别表示 unsigned 和 long)
- 二进制:使用 0b 或 0B 前缀
- 八进制: 使用 0 前缀
- 十六进制:使用 0x 或 0X 前缀
四种进制的代码示例:
const int decimalLiteral = 42; // 十进制
const int binaryLiteral = 0b_0010_1010; // 二进制
const int octalLiteral = 0213; // 八进制
const int hexLiteral = 0x2A; // 十六进制
浮点数常量:
使用浮点数常量必须包含小数点、指数或同时包含两者。使用指数形式必须包含整数部分、小数部分或同时包含两者。有符号的指数是用 e 或 E 表示的。 浮点常量通常用来表示时间、日期等需要精确到小数点后几位的结果,且结果不能修改。
一些浮点常量的实例:
const float time = 11.11f;
const float price = 9.99f;
const double data = 11.11;
const double pi = 3.1415926;
字符常量:
字符常量是指用一对单引号括起来的一个字符,如’a’,‘9’,字符常量中的单引号只起定界作用并不表示字符本身。 在 C# 程序中字符常量的主要表示有普通字符 ‘b’、转义序列 ‘\t’、通用字符 ‘\u02C0’。
列举C# 中字符串转义序列:
转义序列 | 字符名称 | Unicode 编码 |
---|---|---|
\’ | 单引号 | 0x0027 |
\" | 双引号 | 0x0022 |
\\ | 反斜杠 | 0x005C |
\0 | null | 0x0000 |
\a | 警报 | 0x0007 |
\b | Backspace | 0x0008 |
\f | 换页 | 0x000C |
\n | 换行 | 0x000A |
\r | 回车 | 0x000D |
\t | 水平制表符 | 0x0009 |
\v | 垂直制表符 | 0x000B |
\u | Unicode 转义序列 (UTF-16) | \uHHHH(范围:0000 - FFFF;示例:\u00E7 =“ç”) |
\U | Unicode 转义序列 (UTF-32) | \U00HHHHHH(范围:000000 - 10FFFF;示例:\U0001F47D = “👽”) |
\x | 除长度可变外,Unicode 转义序列与“\u”类似 | \xH[H][H][H](范围:0 - FFFF;示例:\x00E7、\x0E7 或 \xE7 =“ç” |
使用字符常量转义序列的示例
class Program
{static void Main(){Console.WriteLine("Hello,\t\n world");Console.ReadLine();}
}
字符串常量:
字符串常量是一对双引号括起来的字符序列,与字符常量不同的地方在于表达形式、含义和内存。字符串常量的声明是括在双引号“”里,或者使用@“” 表示取消字符串中的转义符 。字符串常量常用于用户程序输入信息、 程序向用户显示信息等。
各种形式的字符串常量实现:
const string str0 = "hello, C#"; // hello, C#
const string str1 = @"hello, C#"; // hello, C#
const string str2 = "hello \t C#"; // hello C#
const string str3 = @"hello \t C#"; // hello \t C#
const string str4 = "Joe said \"Hello\" to me"; // Joe said "Hello" to me
const string str5 = @"Joe said ""Hello"" to me"; // Joe said "Hello" to me
const string str6 = "\\\\server\\share\\file.txt"; // \\server\share\file.txt
const string str7 = @"\\server\share\file.txt"; // \\server\share\file.txt
const string str8 = "one\r\ntwo\r\nthree";
const string str9 = @"onetwothree";
- 即使表达形式不同,但是表示的都是相同的字符串常量
- 声明字符串时可以使用换行和空格
结语
✔️ 以上就是对 C# 程序中变量和常量的使用,希望能够对大家有所帮助。望大家多多支持,你们的支持就是笔者创作最大的动力!
相关文章:
【C#基础】C# 变量和常量的使用
序号系列文章1【C#基础】C# 程序通用结构总结2【C#基础】C# 程序基础语法解析3【C#基础】C# 数据类型总结文章目录前言一. 变量(variable)1,变量定义及初始化2,变量的类别3,接收输出变量二. 常量(constant&…...
nvm安装后出现‘node‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件
出现这个问题多半是path地址不对。 打开系统环境变量。看看path里面有没有?没有的话,加上就行! 我的报错原因就是因为path里没有自动加上nvm的相关路径。 注意项: 1,在安装nvm之前,提前要把本机以前安装…...

张驰咨询:关于六西格玛,有一些常见的疑惑!
很多想要学习六西格玛的学员,经常会有这些困惑: 以前没有接触过六西格玛,需要什么基础吗?自学还是培训?哪些行业会用到六西格玛呢?学习六西格玛对以后的工作有哪些帮助?如何选择六西格玛培…...

【Vercel】教你部署imsyy/home个人主页
本篇博客教你如何部署一个自己的个人主页 项目地址:https://github.com/imsyy/home 本文首发于 慕雪的寒舍 1.fork仓库vercel部署 首先我们点击fork,将仓库复刻到自己的账户 随后进入vercel,点击dashboard-add new-project 选择你复刻的仓库…...

GeekChallenge
2.GeekChallenge 1.web 1.朋友的学妹 url:http://49.234.224.119:7413/ 右键点击查看源码,找到flagU1lDe0YxQF80c19oNExwZnVsbGxsbGx9 然后base64解码得到SYC{F1_4s_h4Lpfullllll} 2.EZwww url:http://47.100.46.169:3901/ 根据网站提示…...
Java文件IO
文章目录Java中的文件操作File常用构造方法方法文件内容的读写——数据流InputStreamFileInputStream利用Scanner进行字符读取OutputStreamPrintWriter按字符读取文件(FileReader)练习代码实例如何按字节进行数据读如何按字节进行数据写如何按字符进行数据读如何按字符进行数据…...
useSSL使用安全套接字协议(史上最全最详细)
useSSL使用安全套接字协议(史上最全最详细) SSL即为:Secure Sockets Layer 安全套接字协议。 useSSLfalse和useSSLtrue的区别: 在MySQL进行连接时: 如果MySQL的版本是5.7之后的版本必须要加上useSSLfalse,…...
面向对象复习(2)
面向对象(2) 对象与引用 java语言中除基本类型之外的变量都称之为引用类型 java中的对象时通过引用对其操作的 Car bm new Car(); 右边的new Car是以Car类为模板,调用无参构造函数,在堆空间中创建一个Car对象 左边的Car bm 在栈中创建了一个Car类型的引用变量,所谓Car的…...

python中使用numpy包的向量矩阵相乘
一直对np的线性运算不太清晰,正好上课讲到了,做一个笔记整个理解一下 1.向量和矩阵 在numpy中,一重方括号表示的是向量vector,vector没有行列的概念。二重方括号表示矩阵matrix,有行列。 代码显示如下: …...
ElasticSearch 学习(一)
目录一、Elasticsearch 简介二、Elasticsearch 发展史三、Elasticsearch 功能四、Elasticsearch 特点五、Elasticsearch 应用场景一、Elasticsearch 简介 Elasticsearch 是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据…...
【新】华为OD机试 - 交换字符(Python)| 刷完获取OD招聘渠道
交换字符 题目 给定一个字符串 S 变化规则: 交换字符串中任意两个不同位置的字符 M S 都是小写字符组成 1 <= S.length <= 1000 输入 一串小写字母组成的字符串 输出 按照要求变换得到最小字符串 示例一 输入 abcdef输出 abcdef示例二 输入 bcdefa输出 acde…...

手把手教你解决传说中的NPE空指针异常
1. 前言最近有好几个初学java的小伙伴,甚至是学习到了JavaWeb、框架阶段的小伙伴也跑来问壹哥,该如何解决Java中的NullPointerException空指针异常。因为NPE是初学者特别常见的典型异常,所以壹哥在这里专门写一篇文章,来手把手地教…...

【pytorch安装】conda安装pytorch无法安装cpu版本(完整解决过程)
问题描述 在安装pytorch过程中,发现最后验证torch时总是返回结果为False,结果翻上去发现自己安装的是cpu版本的。 然后又通过conda去更换不同版本尝试,发现都是cpu版本的。 问题分析 通过conda安装pytorch是从源中搜索匹配指令中的文件&am…...

云计算ACP云服务器ECS实例题库
😘作者简介:一名99年软件运维应届毕业生,正在自学云计算课程。👊宣言:人生就是B(birth)和D(death)之间的C(choise),做好每一个选择。&…...
面试题:作用域、变量提升、块级作用域、函数作用域、暂存性死区、var和let的区别
<script>var a 10;(function () {console.log(a)a 5console.log(window.a)var a 20;console.log(a)})() </script> 上述代码: 1、主要是涉及到变量提升和函数作用域,var a20这行代码会在函数作用域中提升var a 至最顶部…...
JAVA练习49-爬楼梯
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、题目-爬楼梯 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示:这里可以添加本文要记录的大概内容: 2月13日练习内容…...

深兰科技机器人商丘制造基地正式投产,助力商丘经济高质量发展
2月9日,深兰科技机器人商丘制造基地投产仪式在商丘市梁园区北航创新园隆重举行。商丘市人大常委会副主任、梁园区委书记张兵,梁园区区长薛天江、河南省装备制造业协会会长张桦,河南省机器人行业协会会长王济昌,深兰科技集团董事长…...
ES倒排索引/查询、写入流程
ES学习笔记 Elasticsearch学习笔记_巨輪的博客-CSDN博客 Elasticsearch学习之图解Elasticsearch中的_source、_all、store和index属性_BUse的博客-CSDN博客 倒排索引 倒排索引:ES倒排索引底层原理及FST算法的实现过程_es fst_Elastic开源社区的博客-CSDN博客 【…...

2023软考考哪个证书好?
软考有三个级别(初级,中级和高级),这三个级别分别对应5个方向,下面这张图片呢,可以一目了然,一些小小建议!!!遵循一个原则:首先选专业对口的科目&…...

一般人我劝你不要自学软件测试!!!
本人5年测试经验,在学测试之前对电脑的认知也就只限于上个网,玩个办公软件。这里不能跑题,我为啥说:自学软件测试,一般人我还是劝你算了吧?因为我就是那个一般人! 软件测试基础真的很简单&…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...