C#基础知识 - 变量、常量与数据类型篇
C#基础知识 - 变量、常量与数据类型篇
- 第3节 变量、常量与数据类型
- 3.1 C#变量
- 3.1.1 变量使用
- 3.1.2 自定义变量
- 3.1.2 接收用户输入
- 3.2 C#常量
- 3.2.1 常量的使用
- 3.3 C#数据类型
- 3.3.1 数据类型之值类型
- 3.3.2 数据类型之引用类型
更多C#基础知识详解请查看:C#基础知识 - 从入门到放弃
第3节 变量、常量与数据类型
3.1 C#变量
变量可以理解为是我们程序可以操作的内存区域的名称,在 C# 中每个变量都有自己特定的类型,这个类型确定了变量所占内存的大小、布局、取值范围以及可以对该变量执行的操作。
可以将变量当作一种通过符号(变量名)表示某个内存区域的方法,变量的值可以更改,并且可以多次重复使用。C# 中的基本变量类型可以归纳为以下几种:
类型 | 变量名称 |
---|---|
整型(整数类型) | sbyte、byte、short、ushort、int、uint、long、ulong、char |
浮点型 | float、double |
十进制类型 | decimal |
布尔型 | true、false |
空类型 | 可为空值的数据类型 |
3.1.1 变量使用
1、声明变量
2、初始化变量(变量赋值)
3、变量使用
3.1.2 自定义变量
使用如下:
int a; //double b;
a = 23; //b = 3.14;
Console.WriteLine(a);
Console.ReadKey(); //停留弹窗
3.1.2 接收用户输入
代码如下:
Console.WriteLine("输入一个整数:");
int a = int.Parse(Console.ReadLine());
Console.WriteLine("你输入的数是:"+a);
Console.ReadKey(); //停留弹窗
运行结果:
输入一个整数:
23
你输入的数是:23
在上述代码中,int.Parse( )
函数用于将字符串转换为整数类型(int)。它接受一个表示整数的字符串参数,并返回对应的整数值。因为C#默认用户输入的数据是字符串类型(string),需要使用int.Parse( )
函数进行转换。
使用int.Parse( )
函数需要注意以下几点:
1、字符串必须包含有效的整数表示。
2、如果字符串无法解析为整数,则会抛出FormatException异常。
3、转换结果的范围应该在int类型的表示范围内,否则会抛出OverflowException异常。
除了int.Parse( )
函数,C#还提供了其他类似的类型转换方法,比如double.Parse( )
用于将字符串转换为双精度浮点数,bool.Parse( )
用于将字符串转换为布尔值等。
这些方法在处理类型转换时非常有用,但要确保字符串的格式与目标类型匹配,以避免转换错误。
3.2 C#常量
常量和《变量》类似,唯一不同的是常量的值在程序的编译阶段就已经确定了,而且在程序的运行期间不允许修改。常量可以是任何基本数据类型,如整数常量、浮点常量、字符串常量等等。
常量在程序中用于存储不可变的数值、字符串,或者其他类型的数据。使用常量的好处在于可以提高代码的可读性和可维护性,并且在编译时会进行常量优化,减少运行时的开销。
3.2.1 常量的使用
1、声明常量 - const
2、初始化常量(常量赋值)
3、常量使用
【示例】计算圆的周长和面积。
const double pi = 3.14;double r = 5;Console.WriteLine("此圆的周长是:"+2*pi*r);Console.WriteLine("此圆的面积是:"+pi*r*r);Console.ReadKey(); //停留弹窗
运行程序:
此圆的周长是:31.4
此圆的面积是:78.5
需要注意: 常量只能在声明时进行初始化,并且初始化值必须是一个编译时可确定的常量表达式。常量不能在运行时修改,并且不能重复赋值。
使用常量可以提高程序的可读性和可维护性,特别在使用固定值的时候,可以减少魔法数字的出现。魔法数字是未经解释和命名的硬编码值,使用常量可以将这些值集中起来管理,提高代码的可靠性和可维护性。
3.3 C#数据类型
C#中,数据类型可以分为值类型(value types)和引用类型(reference types)。值类型直接存储数据的值,而引用类型存储数据的地址。
3.3.1 数据类型之值类型
C#中常见的值类型:
1、数值类型:
整数类型:sbyte, byte, short, ushort, int, uint, long, ulong。
浮点类型:float, double, decimal。
2、布尔类型:
bool:表示逻辑值的类型,只能取值true或false。
3、字符类型:
char:表示单个字符的Unicode字符。
4、枚举类型:
enum:用户定义的枚举类型,用于定义一组命名的常量值。
5、结构体类型(struct):
struct:用户定义的结构类型,用于封装多个相关的值。
需要注意:
1、值类型的特点是存储在栈上,比较高效,适用于存储较小的数据和简单的数值计算。在使用值类型时,注意数据的大小和范围是否满足需求,并且可以避免不必要的副本创建,以提高性能。
2、值类型在内存中分配空间并直接存储数据的值,因此它们通常具有大小已知的固定内存布局。值类型的赋值和参数传递是按值传递的,即复制整个值。这意味着在对值类型进行操作时,操作的是它们的副本,而不是原始值本身。
3.3.2 数据类型之引用类型
C#中,引用类型(reference types)是一种存储对数据对象的引用的数据类型。引用类型的变量存储了对象在内存中的地址,而不是直接存储对象的数据。
C#中常见的引用类型:
1、类类型(class):
class:用户定义的类类型,用于封装数据和方法。
2、字符串类型:
string:用于表示一个或多个字符的字符串。
3、数组类型:
数组(array):用于存储相同类型的元素的集合。
4、接口类型(interface):
interface:定义了一组方法和属性的类型,用于实现多态性。
5、委托类型(delegate):
delegate:用于定义方法的委托类型。
需要注意:
1、引用类型的变量存储的是指向实际数据对象的引用(地址),而不是直接存储数据的值。多个引用变量可以引用同一个数据对象,因此可以在不同的地方操作和修改同一个对象。引用类型的赋值和参数传递是按引用传递的,即传递引用而不是复制整个对象。
2、引用类型的特点是存储在堆上,并且具有动态分配和释放内存的能力。引用类型适合存储复杂的数据结构和大量数据。在使用引用类型时,需要注意空引用的可能性和内存管理的问题,确保值的正确性和安全性。
相关文章:
C#基础知识 - 变量、常量与数据类型篇
C#基础知识 - 变量、常量与数据类型篇 第3节 变量、常量与数据类型3.1 C#变量3.1.1 变量使用3.1.2 自定义变量3.1.2 接收用户输入 3.2 C#常量3.2.1 常量的使用 3.3 C#数据类型3.3.1 数据类型之值类型3.3.2 数据类型之引用类型 更多C#基础知识详解请查看:C#基础知识 …...

Java面向对象思想以及原理以及内存图解
文章目录 什么是面向对象面向对象和面向过程区别创建一个对象用什么运算符?面向对象实现伪代码面向对象三大特征类和对象的关系。 基础案例代码实现实例化创建car对象时car引用的内存图对象调用方法过程 成员变量和局部变量作用范围在内存中的位置 关于对象的引用关系简介相关…...

Gitbook----基于 Windows 10 系统本地安装配置 Gitbook 编写属于自己的电子书
查看原文 文章目录 一、安装 Nodejs二、安装 Gitbook三、gitbook 的使用方法四、设计电子书的目录结构五、设置 gitbook 常用配置 一、安装 Nodejs 若要在 Windows 10 系统即本地使用 Gitbook,需要安装 gitlab-cli 工具,而 gitbook-cli 工具是基于 Node…...

springMVC-Restful风格
基本介绍 REST:即Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用. 1.HTTP协议里面,四个表示操…...

【OS】操作系统总复习笔记
操作系统总复习 文章目录 操作系统总复习一、考试题型1. 论述分析题2. 计算题3. 应用题 二、操作系统引论(第1章)2.1 操作系统的发展过程2.2 操作系统定义2.3 操作系统的基本特性2.3.1 并发2.3.2 共享2.3.3 虚拟2.3.4 异步 2.4 OS的功能2.5 OS结构2.5 习…...
powerbuilder游标的使⽤
在某些PowerBuilder应⽤程序的开发中,您可能根本⽤不到游标这样⼀个对象。因为在其它⼯具开发中很多需⽤游标实现的⼯作,在PowerBuilder中却已有DataWin-dow来代劳了。事实上,DataWindow不仅可以替代游标进⾏从后台数据库查询多条记录的复杂操作,⽽且还远不⽌这些。但是同DataW…...

docker创建镜像 Dockerfile
目录 docker的创建镜像的方式 dockerfile形成(原理) docker的核心作用 docker的文件结构 dockerfile的语法 CMD和ENTRPOINT的区别 创建dockerfile镜像 区别 RUN命令的优化 如何把run命令写在一块 copy和ADD区别 区别 centos7 构建Apache的d…...

C++共享和保护——(2)生存期
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言📝 生命如同寓言,其价值不在于…...
你好,C++(3)2.1 一个C++程序的自白
第2部分 与C第一次亲密接触 在浏览了C“三分天下”的世界版图之后,便对C有了基本的了解,算是一只脚跨入了C世界的大门。那么,怎样将我们的另外一只脚也跨入C世界的大门呢?是该即刻开始编写C程序?还是…… 正在我们犹…...

【INTEL(ALTERA)】Agilex7 FPGA Development Kit DK-DEV-AGI027R1BES编程/烧录/烧写/下载步骤
DK-DEV-AGI027R1BES 的编程步骤: 将外部 USB Blaster II 连接到 J10- 外部 JTAG 接头。将交换机 SW5.3 设置为 ON(首次)。打开 英特尔 Quartus Prime Pro Edition 软件编程工具。单击 硬件设置 ,然后选择 USB Blaster II。将硬件…...
大文件分块上传的代码,C++转delphi,由delphi实现。
在 Delphi 中,我们通常使用 IdHTTP 或 TNetHTTPClient 等组件来处理 HTTP 请求 原文章链接: 掌握分片上传:优化大文件传输的关键策略 【C】【WinHttp】【curl】-CSDN博客 改造思路: 文件分块处理:使用 TFileStream 来…...

MongoDB表的主键可以重复?!MongoDB的坑
MongoDB表的主键可以重复?! 眼见为实? 碰到一个奇怪的现象, MongoDB的一个表居然有两个一样的_id值! 再次提交时,是会报主键冲突的。那上图,为什么会有两个一样的_id呢? 将它们的…...

C++初阶-list类的模拟实现
list类的模拟实现 一、基本框架1.1 节点类1.2 迭代器类1.3 list类 二、构造函数和析构函数2.1 构造函数2.2 析构函数 三、operator的重载和拷贝构造3.1 operator的重载3.2 拷贝构造 四、迭代器的实现4.1 迭代器类中的各种操作4.1 list类中的迭代器 五、list的增容和删除5.1 尾插…...
RecyclerView中的设计模式解读
一.观察者模式:(待完善,这个写的不咋地,没理解透彻) 1.观察者模式的概念: (1)消息传递方向:被观察者->观察者 (2)代码实现: 首…...
ACwing算法备战蓝桥杯——Day30——树状数组
定义: 树状数组是一种数据结构,能将对一个区间内数据进行修改和求前缀和的这两种操作的最坏时间复杂度降低到O(logn); 实现所需变量 变量名变量数据类型作用数组a[]int存储一段区间数组tr[]int表示树状数组 主要操作 函数名函数参数组要作用lowbit()int…...

elementui + vue2实现表格行的上下移动
场景: 如上,要实现表格行的上下移动 实现: <el-dialogappend-to-bodytitle"条件编辑":visible.sync"dialogVisible"width"60%"><el-table :data"data1" border style"width: 100%&q…...

2、快速搞定Kafka术语
快速搞定Kafka术语 Kafka 服务端3层消息架构 Kafka 客户端Broker 如何持久化数据小结 Kafka 服务端 3层消息架构 第 1 层是主题层,每个主题可以配置 M 个分区,而每个分区又可以配置 N 个副本。第 2 层是分区层,每个分区的 N 个副本中只能有…...
CSS新手入门笔记整理:CSS3选择器
属性选择器 属性选择器,指的是通过“元素的属性”来选择元素的一种方式。 语法 元素[attr^"xxx"]{} 元素[attr$"xxx"]{} 元素[attr*"xxx"]{} 选择器 说明 E[attr^"xxx"] 选择元素E,其中E元素的attr属性是…...

D34|不同路径
62.不同路径 初始思路: 1)确定dp数组以及下标的含义: dp[i][i]存放到第i1行和第i1列的方法数 2)确定递推公式: dp[i][i] dp[i -1][i] dp[i][i-1] 3)dp数组如何初始化 第0行是1; 第0列是1&a…...

【运维】Kafka高可用: KRaft(不依赖zookeeper)集群搭建
文章目录 一. kafka kraft 集群介绍1. KRaft架构2. Controller 服务器3. Process Roles4. Quorum Voters5. kraft的工作原理 ing 二. 集群安装1. 安装1.1. 配置1.2. 格式化 2. 启动测试2.1. 启功节点服务2.2. 测试 本文主要介绍了 kafka raft集群架构: 与旧架构的不…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...

云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...

C++--string的模拟实现
一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现,其目的是加强对string的底层了解,以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量,…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...
CppCon 2015 学习:REFLECTION TECHNIQUES IN C++
关于 Reflection(反射) 这个概念,总结一下: Reflection(反射)是什么? 反射是对类型的自我检查能力(Introspection) 可以查看类的成员变量、成员函数等信息。反射允许枚…...