我目前正在处理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中做的,但我认为它对结果没有任何影响。
答案 0 :(得分:13)
类名之间的+
表示+
之后的部分是名称在+
之前的类型的嵌套类型。例如Dictionary<string, string>+KeyCollection
。 KeyCollection
是Dictionary<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
的嵌套类型。在此特定情况下,Matrix4x4
是VectorBasis
内的嵌套struct
。请注意,class
是相同的符号,无论您处理的是什么类型的嵌套类型:
+
这些示例中的所有嵌套类型都具有相同的class A
{
public class B {}
}
struct A
{
public struct B {}
}
class A
{
public enum B {}
}
,FullName
。
在您的情况下,A+B
和VectorBasis
是CanonicalBasis
个成员,这就是为什么您无法通过private
看到它们的原因Type.GetNestedTypes()
{1}}成员。
public
之后的*
表示它是pointer type。该字符串来自System.Numerics.Vector3*
属性的Type
实例。
您可以在MSDN documentation的相应页面上查找FieldInfo.FieldType
类的此字符串和其他可能的字符串表示形式。