目录

C#-结构体

C# 中, 结构体(struct) 是一种 值类型 (Value Type),用于标识小型、轻量的数据对象。它和类(class)很像,但在内存分配、传递方式、使用场景上有明显区别。

一、C# 中结构体是什么

结构体是用 struct 关键字定义的数据类型。

public struct Point
{
    public int X;
    public int Y;
}

使用:

Point p1 = new Point();
p1.X = 10;
p1.Y = 20;

结构体的核心特点:

特性 说明
值类型 存储在栈(或对象内部),复制时是 值类型
不能继承 struct 不能继承其他 struct 或 class
可以实现接口 但不能继承类
默认有无参构造函数 不允许自定义无参构造(旧版本)
适合小对象 一般推荐 小于16字节

struct vs class 的核心区别

对比 struct class
类型 值类型 引用类型
内存
赋值 拷贝整个对象 拷贝引用
继承 不支持 支持
null 不可以 可以

示例:

struct A { public int X ;}
class B { public int Y ;}

A a1 = new A();
A a2 = a1; // 复制值

B b1 = new B();
B b2 = b1; // 复制引用

在 WPF 中常用的 struct

几何、尺寸、颜色、布局数据等类型都是 struct。

struct 作用
Point 坐标
Size 宽高
Rect 矩形
Thickness Margin / Padding
Color 颜色
Vector 向量

例:

Point p = new Point(100, 200);

或:

button,Margin = new Thickness(10, 5, 10, 5);

这里 Thickness 就是 struct。

二、WPF 中什么场景会用 struct

1.布局尺寸数据

Size size = new Size(200, 100);

Measure / Arrange 阶段使用。

2.坐标和图形计算

Point start = new Point(0, 0);
Point end = new Point(100, 100);

用于:

  • Canvas
  • Drawing
  • Geometry

3.UI 边距

button.Margin = new Thickness(20);

Thickness 是 struct,因为它只是;

Left
Top
Right
Bottpm

4.颜色

Color c = Color.FromRgb(255, 0, 0);

颜色是小型数据结构,非常是适合 struct。

三、WPF 中适合用 struct 的场景 和不适合 struct 的场景

适合用struct:

  • 标识 简单数据对象
  • 数据 不可变(immutable)
  • 很小 (通常 < 16 bytes)
  • 不需要继承
  • 高频创建
public struct MyPoint
{
    public double X;
    public double Y;
}

不适合用 struct

如果满足一下情况,应该用 class:

  • 对象较大
  • 需要继承
  • 需要引用语义
  • 会频繁修改
  • 用作 ViewModel

总结:

WPF中涉及这些 struct 的原因:

  1. 减少 GC 压力:布局系统创建大量 Point / Size
  2. 提高性能:值类型在栈上更快
  3. 表达数学对象

例如:Point,Vector,Matrix

struct 本质: 一个轻量的值类型数据结构。

自定义 struct 的典型场景:表示一个小型、不可变、纯数据的值类型。

例如:

  • 坐标
  • 颜色
  • 向量
  • 范围
  • 尺寸