什么" +"表示反映的FullName和' *'在成员c#之后

时间:2018-05-06 11:45:43

标签: c# .net reflection

我目前正在处理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.S。我是在c#interactive中做的,但我认为它对结果没有任何影响。

2 个答案:

答案 0 :(得分:13)

类名之间的+表示+之后的部分是名称在+之前的类型的嵌套类型。例如Dictionary<string, string>+KeyCollectionKeyCollectionDictionary<TKey, TValue>的内部类。

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

public unsafe Vector3* Element0;

答案 1 :(得分:4)

在字符串render() { return( ... <FlatList ... data={this.state.posts} renderItem={({item}) => ... } keyExtractor={(item, index) => index} onEndReached={this.onScrollHandler} onEndThreshold={0} /> ... ); } 中,System.Numerics.Matrix4x4+VectorBasis表示+VectorBasis的嵌套类型。在此特定情况下,Matrix4x4VectorBasis内的嵌套struct。请注意,class是相同的符号,无论您处理的是什么类型的嵌套类型:

+

这些示例中的所有嵌套类型都具有相同的class A { public class B {} } struct A { public struct B {} } class A { public enum B {} } FullName

在您的情况下,A+BVectorBasisCanonicalBasis个成员,这就是为什么您无法通过private看到它们的原因Type.GetNestedTypes() {1}}成员。

public之后的*表示它是pointer type。该字符串来自System.Numerics.Vector3*属性的Type实例。

您可以在MSDN documentation的相应页面上查找FieldInfo.FieldType类的此字符串和其他可能的字符串表示形式。