解释并对比 C# 中的值类型和引用类型
一般来说,C# 中的所有类型可以分为两大类:**值类型**和**引用类型**。让我们详细了解每种类型。
值类型
值类型变量直接包含其数据。每个变量都有其自身的数据副本。因此,值类型变量不可能修改另一个对象。
值类型可以是以下类型之一:
- 所有数值类型,例如**int**、**float**和**double**
- **char**和**bool**类型
- **struct**类型或
- **枚举**类型。
值类型简单地包含值。例如,整数类型包含实际的数字,而不是像引用类型那样指向数字的指针。
要创建自定义值类型,可以使用结构体。例如:
public struct Point
{
public int X;
public int Y;
}
var p1 = new Point();在内存中,Point 的实例表示如下:

当您将值类型变量赋值给另一个变量时,赋值操作会创建正在赋值的值的副本。例如,
Point p2 = p1;

引用类型
引用类型变量存储对其对象的引用。两个不同的变量有可能持有对同一对象的引用。一个变量对对象所做的任何更改都对第二个变量可见。
引用类型包含以下类型:
- 字符串
- 类
- 数组
- 委托
- 接口
例如,您可以创建一个类,它是一种引用类型,如下所示:
public class Point{
public int X;
public int Y;
}
var p1 = new Point();
当您将引用类型变量赋值给另一个变量时,赋值操作仅复制引用,而不是实际的对象。
Point p2 = p1;

示例
using System;
class Program{
static void Main(){
var p1 = new Point { X = 10 };
Point p2 = p1;
p2.X = 20;
Console.WriteLine("Value Type");
Console.WriteLine(p1.X);
Console.WriteLine(p2.X);
var u1 = new User { Age = 10 };
User u2 = u1;
u2.Age = 20;
Console.WriteLine("Reference Type");
Console.WriteLine(u1.Age);
Console.WriteLine(u2.Age);
}
}
public struct Point{
public int X;
public int Y;
}
public class User{
public int Age { get; set; }
}输出
Value Type 10 20 Reference Type 20 20
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP