从零开始掌握C#核心:变量与数据类型

什么是变量?

变量 是指程序用来存储和引用数据的存储区的名字 。每个变量都有一个特定的类型,它决定了变量所占内存的大小和布局,以及可以存储的值的范围和可以对其执行的操作。你可以将变量想象成一个带标签的容器,用于存储数据以便在程序中重复使用。

变量的声明与初始化

在C#中,使用变量前必须先"声明"它,也就是告诉编译器变量的类型和名称。

声明语法:

csharp 复制代码
<data_type> <variable_name>;

例如,声明一个用来存储整数的变量:

csharp 复制代码
int age;

声明之后,你可以给变量赋值,这个过程称为"初始化"。

csharp 复制代码
age = 25;

当然,你也可以在声明的同时进行初始化:

csharp 复制代码
int age = 25;

养成初始化变量的好习惯,可以避免程序出现意想不到的结果。

C#的数据类型:两大阵营

在C#中,数据类型主要分为两大类:值类型(Value Types)引用类型(Reference Types)

1. 值类型 (Value Types)

值类型的变量直接包含其数据。 当你将一个值类型变量赋给另一个变量时,实际上是创建了该数据的完整副本。 它们通常存储在内存的"栈"上,访问速度快。

常见的内置值类型包括:

  • 整型: 用于表示整数。
    • int: 32位有符号整数,最常用。
    • long: 64位有符号整数,用于表示非常大的整数。
    • short: 16位有符号整数。
    • byte: 8位无符号整数 (0 到 255)。
  • 浮点型: 用于表示带有小数的数字。
    • float: 单精度浮点数。
    • double: 双精度浮点数,精度更高,更常用。
    • decimal: 用于高精度的财务和货币计算。
  • 布尔型:
    • bool: 只能是 truefalse
  • 字符型:
    • char: 表示单个Unicode字符。

示例:

csharp 复制代码
int myInt = 10;
int anotherInt = myInt; // anotherInt 获得了 myInt 的一个副本

anotherInt = 20;

Console.WriteLine(myInt);      // 输出 10
Console.WriteLine(anotherInt); // 输出 20
// 可以看到,修改anotherInt并不影响myInt

2. 引用类型 (Reference Types)

与值类型不同,引用类型的变量不直接存储实际数据,而是存储对数据所在内存地址的"引用"。 换句话说,它指向了数据实际存储的位置。 这些数据实际存放在内存的"堆"上。

当把一个引用类型变量赋给另一个变量时,只是复制了引用(地址),两个变量将指向堆中同一个对象。 因此,通过一个变量修改了对象,另一个变量也会受到影响。

内置的引用类型主要有:

  • 字符串 (string): 用于表示一系列字符。虽然 string 的行为在很多方面看起来像值类型(比如它的不变性),但它本质上是引用类型。
  • 对象 (object): 它是C#中所有类型的最终基类。一个 object 类型的变量可以引用任何类型的实例。
  • 数组 (Array): 用于存储同类型的元素集合。
  • 类 (Class)、接口 (Interface)、委托 (Delegate)

示例:

csharp 复制代码
// 假设我们有一个 Person 类
public class Person
{
    public string Name { get; set; }
}

Person person1 = new Person();
person1.Name = "张三";

Person person2 = person1; // person2 复制了 person1 的引用,指向同一个对象

person2.Name = "李四";

Console.WriteLine(person1.Name); // 输出 "李四"
Console.WriteLine(person2.Name); // 输出 "李四"
// 可以看到,修改person2的Name属性,person1的也跟着改变了

值类型与引用类型的核心区别

特性 值类型 引用类型
存储内容 直接存储数据值 存储数据的引用(内存地址)
内存位置 主要在栈 (Stack) 上分配 在堆 (Heap) 上分配
赋值操作 复制数据本身 复制引用
基类 继承自 System.ValueType 继承自 System.Object
可为null 默认不可为null (可空类型除外,如int?) 可以为 null

结语

点个赞,关注我获取更多实用 C# 技术干货!如果觉得有用,记得收藏本文!

相关推荐
码界奇点13 小时前
Java Web学习 第15篇jQuery从入门到精通的万字深度解析
java·前端·学习·jquery
小鑫同学13 小时前
Alias Assistant:新一代 macOS Shell 别名管理解决方案
前端·前端工程化
꒰ঌ小武໒꒱13 小时前
RuoYi-Vue 前端环境搭建与部署完整教程
前端·javascript·vue.js·nginx
名字越长技术越强14 小时前
前端之相对路径
前端
望道同学14 小时前
PMP/信息系统项目管理师 9 张 思维导图【考试必备】
前端·后端·程序员
c#上位机15 小时前
halcon图像增强之自动灰度拉伸
图像处理·算法·c#·halcon·图像增强
局i15 小时前
Vue 中 v-text 与 v-html 的区别:文本渲染与 HTML 解析的抉择
前端·javascript·vue.js
菜鸟冲锋号15 小时前
问题:增量关联(实时同步新数据) 这个场景中,如果hudi_pay 变更了一条数据,hudi_order_pay_join 结果的数据会跟着变化吗
服务器·前端·数据库
贩卖黄昏的熊16 小时前
typescript 快速入门
开发语言·前端·javascript·typescript·ecmascript·es6
拾柒SHY16 小时前
XSS-Labs靶场通关
前端·web安全·xss