struct是值类型,内存通常分配在栈上或作为对象的一部分嵌入存储;class是引用类型,实例总是在托管堆上分配。struct的数据随其所在对象的生命周期自动管理,无需gc介入,适合小型、不可变的数据结构,复制时进行值拷贝,确保独立性;而class通过引用访问堆上的实例,支持共享状态、继承和多态,适用于复杂对象,生命周期由gc管理。选择struct应满足:代表逻辑上的值、实例小、避免频繁装箱、需要值语义及性能关键场景;选择class则适用于实体类、大对象、需引用语义、继承或多态以及长生命周期的情况。默认优先使用class,只有在明确符合struct适用条件时才使用struct。

C#里的
struct
class
struct
class
要深入理解C#中
struct
class
struct
当你在代码中声明一个
struct
public struct Point {
public int X;
public int Y;
}
public void MyMethod() {
Point p1 = new Point { X = 10, Y = 20 };
// ...
}这个
p1
X
Y
p1
但如果一个
struct
class
struct
public class Circle {
public Point Center; // Point是struct
public int Radius;
}
public struct Rectangle {
public Point TopLeft; // Point是struct
public Point BottomRight;
}在这种情况下,
Point
Circle
Rectangle
Rectangle
struct
class
与
struct
class
class
public class Person {
public string Name;
public int Age;
}
public void AnotherMethod() {
Person p = new Person { Name = "Alice", Age = 30 };
// ...
}这里发生了两件事:
new Person()
Person
Name
Age
p
Person
Person
这意味着,
p
AnotherMethod
p
Person
这是个特别有意思,也常常让人犯迷糊的地方。说白了,
struct
class
当我们将一个
struct
struct
struct
struct
public struct Point {
public int X;
public int Y;
}
Point p1 = new Point { X = 10, Y = 20 };
Point p2 = p1; // 此时p2是p1的一个完整副本
p2.X = 50; // 修改p2的X
Console.WriteLine($"p1.X: {p1.X}"); // 输出: p1.X: 10 (p1不受影响)
Console.WriteLine($"p2.X: {p2.X}"); // 输出: p2.X: 50你看,
p2
p1
然而,对于
class
class
class
public class Person {
public string Name { get; set; }
public int Age { get; set; }
}
Person person1 = new Person { Name = "Alice", Age = 30 };
Person person2 = person1; // 此时person2和person1指向堆上同一个Person对象
person2.Name = "Bob"; // 通过person2修改对象的Name
Console.WriteLine($"person1.Name: {person1.Name}"); // 输出: person1.Name: Bob (person1也看到了修改)
Console.WriteLine($"person2.Name: {person2.Name}"); // 输出: person2.Name: Bob这在实际编程中意味着什么呢?
struct
struct
struct
class
class
一个值得注意的陷阱是:如果一个
struct
class
struct
class
struct
这其实是关于性能、设计哲学和内存管理开销的一个权衡。
struct
struct
new class()
struct
struct
struct
struct
class
Customer
Customer
struct
class
class
struct
ValueType
object
class
所以,一个简单的经验法则是:如果你的类型代表一个小的、不可变的“值”,并且它的行为更像一个基本数据类型(比如整数或布尔值),那么
struct
class
struct
class
这确实是个老生常谈的问题,但它背后的考量却很实际。选择
struct
class
优先选择 struct
struct
struct
struct
struct
object
ArrayList
object
struct
object
struct
class
struct
struct
优先选择 class
Customer
Order
FileStream
DatabaseConnection
class
class
class
class
经验法则(我的个人看法):
class
struct
struct
struct
struct
struct
struct
struct
struct
总而言之,
class
struct
以上就是C#的struct和class在内存分配上有什么区别?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号