在成员c#之后,"+"在反映的FullName和'*'中的含义是什么

Kac*_*per 13 .net c# reflection

我目前正在处理c#中的反射.后:

Assembly.LoadFile(@"C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.0.7\System.Numerics.Vectors.dll").GetTypes()
Run Code Online (Sandbox Code Playgroud)

我发现了这个:( [System.Numerics.Matrix4x4], [System.Numerics.Matrix4x4+CanonicalBasis], [System.Numerics.Matrix4x4+VectorBasis] 有来自"System.Numerics.Vectors.dll"的反映类型)我知道Matrix4x4是结构,但我找不到关于CanonicalBasis和VectorBasis的任何信息,以及"+"在这种情况下的含义.我正在做进一步的研究,另一个奇怪的事情是:

Assembly.LoadFile(@"C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.0.7\System.Numerics.Vectors.dll").GetType("System.Numerics.Matrix4x4+VectorBasis").FullName
"System.Numerics.Matrix4x4+VectorBasis"
Run Code Online (Sandbox Code Playgroud)

但:

Assembly.LoadFile(@"C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.0.7\System.Numerics.Vectors.dll").GetType("System.Numerics.Matrix4x4+VectorBasis").Name
"VectorBasis"
Run Code Online (Sandbox Code Playgroud)

此外,当我查看Matrix4x4 + VectorBasis的成员时,有这样的成员:

[System.Numerics.Vector3* Element0] 
Run Code Online (Sandbox Code Playgroud)

它是像c ++中的原始指针吗?或者它是什么?

PS我在c#interactive中这样做,但我认为它对结果没有任何影响.

Pat*_*man 13

+类名之间意味着后的部分+是一个嵌套类型的名称是之前的类型+.例如Dictionary<string, string>+KeyCollection.KeyCollection是一个内在的阶级Dictionary<TKey, TValue>.

所述*确实表示指针,因为提到的场是在不安全模式下:

public unsafe Vector3* Element0;
Run Code Online (Sandbox Code Playgroud)

  • @Kacper使用`GetNestedTypes(BindingFlags.Public | BindingFlags.NonPublic)`来获取*all*嵌套类型. (2认同)