.NET 8 中的 UnsafeAccessor(转载)
反射允许您访问类的私有成员。当您想要访问不属于自己的类的私有成员时,反射非常有用。然而反射的速度很慢,并且不能很好地与 Native AOT 配合使用。这篇文章中将会介绍 .NET 8 中新引入的 UnsafeAccessor,它可以允许您访问私有成员而不进行反射。
在 .NET 8 之前,可以使用反射或通过在运行时生成 IL 来访问私有成员。这两种方法都很慢。.NET 8 提供了一种新的零开销方法来访问私有成员。这是使用 UnsafeAccessorAttribute 该特性完成的。

UnsafeAccessor 基于 C# Source Generator 发生在编译期间,因此你可以将他与 Native AOT 一起使用。
若要访问私有成员,可以使用 UnsafeAccessor 特性创建一个 extern 方法来声明私有成员的访问器。
请注意,UnsafeAccessorAttribute 不如反射强大。例如,尚不完全支持泛型类型。
首先,让我们创建包含私有成员的类
构造函数
实例方法
静态方法
实例属性
可以通过 getter 和 setter 方法访问属性
静态属性
实例字段
静态字段
特性名称以 Unsafe 开头,所以它可以允许不安全的东西,例如修改静态只读字段。