📅  最后修改于: 2023-12-03 15:14:32.468000             🧑  作者: Mango
在C#语言中,类和结构是两种重要的数据类型。它们在语法上很相似,但在实际使用中却有许多不同之处。本文将介绍C#中类和结构之间的区别。
在C#中,我们可以使用class
关键字来定义一个类,使用struct
关键字来定义一个结构。
// 定义一个类
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
// 定义一个结构
struct Point
{
public int X { get; set; }
public int Y { get; set; }
}
类和结构在语法上非常相似,但有以下区别:
public
访问级别。在C#中,类和结构的内存分配方式不同。类是引用类型,它在堆上分配内存。当我们创建一个类的实例时,实际上是在堆上分配了一段内存,然后返回这段内存的地址,即引用。因此,引用类型的变量存储的是堆上的地址,而不是实际数据。
结构是值类型,它在栈上分配内存。当我们创建一个结构的实例时,实际上是在栈上分配了一段内存,然后把这段内存的内容拷贝到变量中。因此,值类型的变量存储的是实际数据,而不是地址。
下面是一个例子,演示了类和结构的内存分配方式。
class Program
{
static void Main(string[] args)
{
// 创建一个类的实例
Person person1 = new Person { Name = "Tom", Age = 20 };
Person person2 = person1;
person2.Age = 30;
// 创建一个结构的实例
Point point1 = new Point { X = 100, Y = 200 };
Point point2 = point1;
point2.X = 300;
Console.WriteLine($"person1.Age={person1.Age}, person2.Age={person2.Age}"); // 输出:person1.Age=30, person2.Age=30
Console.WriteLine($"point1.X={point1.X}, point2.X={point2.X}"); // 输出:point1.X=100, point2.X=300
}
}
在上面的代码中,我们创建了一个类的实例和一个结构的实例。然后通过赋值操作,让它们的值相等。最后我们修改了其中一个变量的属性,然后分别输出了两个变量的属性值。结果显示,类的实例的属性值都被修改了,而结构的实例只有其中一个被修改了。这是因为类的实例是引用类型,修改一个实例的属性,会同时修改所有引用该实例的变量的值。而结构的实例是值类型,修改一个实例的属性,只会修改该实例的值,不会影响到其他变量。
由于类和结构的内存分配方式不同,它们在性能上也有一定的差别。类的实例一般需要在堆上分配大量的内存,而结构的实例只需在栈上分配一小段内存。因此,当需要存储大量数据时,如果使用类,会占用堆上的大量资源,降低程序的性能;而如果使用结构,则可以节省内存,提高程序的性能。
类和结构都是C#中的重要数据类型。它们在语法上很相似,但在实际使用中有许多不同之处。在使用时,应根据实际需要进行选择,以达到最优的效果。