C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C# struct, class区别

C#中struct, class的使用区别

作者:_DRAGON__XU

类和结构体是C#中用于定义数据类型的关键字,它们在内存分配、生命周期管理、性能等方面存在显著差异,下面就来详细的介绍一下这两者的区别,感兴趣的可以了解一下

在 C# 中,classstruct 都用于定义数据类型,但它们在多个方面存在显著的差异。主要的区别体现在内存分配、生命周期、性能等方面。下面是它们的主要区别:

1.内存分配

2.类型存储方式

3.默认构造函数

4.垃圾回收与生命周期

5.继承

6.默认值

7.适用场景

8.传值与传引用

9.内存分配效率

10.示例代码

class示例:

class Person
{
    public string Name;
    public int Age;

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

class Program
{
    static void Main()
    {
        Person p1 = new Person("Alice", 30);
        Person p2 = p1;  // p2 引用同一个对象

        p2.Name = "Bob";
        Console.WriteLine(p1.Name);  // 输出 "Bob"
    }
}

在这个例子中,p1p2 引用了同一个 Person 对象。修改 p2 中的 Name 属性也会影响 p1,因为它们指向同一块内存。

struct示例:

struct Point
{
    public int X;
    public int Y;

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }
}

class Program
{
    static void Main()
    {
        Point p1 = new Point(10, 20);
        Point p2 = p1;  // p2 是 p1 的副本

        p2.X = 30;
        Console.WriteLine(p1.X);  // 输出 10
    }
}

在这个例子中,p2p1 的副本,修改 p2 不会影响 p1,因为它们是值类型,赋值时会创建副本。

总结:

特性class (引用类型)struct (值类型)
内存分配
生命周期管理垃圾回收器管理自动销毁(超出作用域时销毁)
是否支持继承支持继承不支持继承
默认值null所有字段初始化为零值
是否实现接口可以实现多个接口可以实现多个接口
赋值与传递传递引用(引用类型)传递值(复制数据)
适用场景适用于较复杂的对象,涉及共享数据和继承的场景适用于小型数据结构,要求高效的复制与传递的场景
内存效率内存分配较慢,需要垃圾回收内存分配较快,不涉及垃圾回收

在选择使用 class 还是 struct 时,主要依据数据的大小、结构的复杂度、性能需求以及是否需要继承等因素。一般来说,如果对象的大小较大或需要复杂的行为,使用 class;如果是简单的数据结构并且需要高效的复制操作,可以使用 struct

到此这篇关于C#中struct, class的使用区别的文章就介绍到这了,更多相关C# struct, class区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文