You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#反射中FullName的"+"、成员后"*"含义及内部类型疑问

解答你的C#反射相关疑问

Hey there, let's unpack your questions about C# reflection and those nested types in System.Numerics.Vectors.dll!

1. 类型FullName中"+"的含义

那个+符号是.NET反射用来表示嵌套类型的标准标记。当你看到Matrix4x4+CanonicalBasis,就意味着CanonicalBasis是定义在Matrix4x4结构体内部的嵌套类型。在C#代码里,它的写法大概是这样的:

public struct Matrix4x4
{
    // 嵌套静态类
    public static class CanonicalBasis
    {
        // 内部成员:预定义矩阵常量等
    }
}

反射系统用+来分隔外部类型和它的嵌套类型,这是区分嵌套类型和普通顶级类型的关键标识。

2. CanonicalBasis和VectorBasis是什么

这两个都是Matrix4x4内部的静态嵌套辅助类,设计用来提供预定义的常用矩阵常量,帮你省去手动重复创建这些通用矩阵的麻烦。具体来说:

  • CanonicalBasis包含了标准3D坐标系下的基矩阵,比如Front(前向视图的基准矩阵)、Left(左向基准矩阵)、Up(上向基准矩阵)等静态属性,直接返回对应的预初始化Matrix4x4实例;
  • VectorBasis则提供了和向量基相关的工具成员,比如通过传入三个正交向量生成对应基矩阵的静态方法或属性。

因为它们是嵌套在Matrix4x4内部的辅助类型,官方文档通常不会单独为它们做详细说明,你可以通过反射进一步探索它们的成员,比如运行这段代码查看具体内容:

var dllPath = @"C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.0.7\System.Numerics.Vectors.dll";
var canonicalBasisType = Assembly.LoadFile(dllPath)
    .GetType("System.Numerics.Matrix4x4+CanonicalBasis");

Console.WriteLine("CanonicalBasis members:");
foreach (var member in canonicalBasisType.GetMembers(BindingFlags.Public | BindingFlags.Static))
{
    Console.WriteLine($"  - {member.Name} ({member.MemberType})");
}

3. 成员后"*"的含义

你提到的成员末尾的*,一般是反射用来标识指针类型的标记。比如如果某个成员的类型是int*(整数指针),反射返回的类型名称就会显示为System.Int32*。这种类型属于C#的不安全代码范畴,通常用于需要直接操作内存地址的场景,比如高性能计算或与非托管代码交互时。

需要注意的是,只有当成员是指针类型时才会出现这个标记,普通值类型或引用类型不会有这个后缀。

内容的提问来源于stack exchange,提问作者Kacper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:38:30