从零开始掌握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# 技术干货!如果觉得有用,记得收藏本文!

相关推荐
han_1 小时前
前端高频面试题之Vuex篇
前端·vue.js·面试
qq_415216252 小时前
vue3搭建项目yarn+vue3+webpack+less+element-plus
前端·webpack·less
天天向上10242 小时前
VueUse的使用
前端·vue.js·vscode
yue0082 小时前
C# 生成指定位数的编号
开发语言·c#
红黑色的圣西罗3 小时前
C# List.Sort方法总结
开发语言·c#
猪猪拆迁队3 小时前
前端图形引擎架构设计:双引擎架构设计
前端·后端·架构
宋辰月3 小时前
学习react第三天
前端·学习·react.js
bug总结4 小时前
更新原生小程序封装(新增缓存订阅)完美解决
前端·缓存·小程序
5335ld4 小时前
后端给的post 方法但是要求传表单数据格式(没有{})
开发语言·前端·javascript·vue.js·ecmascript