代码之家  ›  专栏  ›  技术社区  ›  Kacper

在反映的全名和成员c后的“*”中,“+”是什么意思#

  •  13
  • Kacper  · 技术社区  · 6 年前

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

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

    我发现了这个: [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"
    

    但是:

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

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

    [System.Numerics.Vector3* Element0] 
    

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

    P、 我是用c#interactive做的,但我认为这对结果没有任何影响。

    2 回复  |  直到 6 年前
        1
  •  13
  •   Patrick Hofman Wahid Bitar    6 年前

    这个 + 类名称之间表示 + 是类型的嵌套类型,其名称位于 + 例如 Dictionary<string, string>+KeyCollection KeyCollection 是的内部类 Dictionary<TKey, TValue>

    这个 * 确实表示指针,因为 the field mentioned 处于不安全模式:

    public unsafe Vector3* Element0;
    
        2
  •  4
  •   adjan    6 年前

    在字符串中 System.Numerics.Matrix4x4+VectorBasis ,则, + 意味着 VectorBasis 是的嵌套类型 Matrix4x4 .在这种特殊情况下 矢量基 是嵌套的 struct a的内部 class .请注意 + 无论您处理的是哪种嵌套类型,都是相同的符号:

    class A
    {
        public class B {}
    }
    
    struct A
    {
        public struct B {}
    }
    
    class A
    {
        public enum B {}  
    }
    

    这些示例中的所有嵌套类型都具有相同的 FullName ,则, A+B

    就你而言, 矢量基 CanonicalBasis private 成员们,这就是为什么你不能看穿他们 Type.GetNestedTypes() 仅显示 public 成员。


    这个 * 之后 System.Numerics.Vector3* 意味着它是 pointer type 。字符串来自 Type 的实例 FieldInfo.FieldType 所有物


    您可以查找 类型 MSDN documentation