24using System.Collections.Generic;
40 public sealed override MemberTypes MemberType
42 get {
return MemberTypes.Field; }
45 public abstract FieldAttributes Attributes {
get; }
47 public abstract object GetRawConstantValue();
49 internal abstract FieldSignature FieldSignature {
get; }
53 get {
return this.FieldSignature.FieldType; }
56 public CustomModifiers __GetCustomModifiers()
58 return this.FieldSignature.GetCustomModifiers();
61 public Type[] GetOptionalCustomModifiers()
63 return __GetCustomModifiers().GetOptional();
66 public Type[] GetRequiredCustomModifiers()
68 return __GetCustomModifiers().GetRequired();
73 get {
return (Attributes & FieldAttributes.Static) != 0; }
78 get {
return (Attributes & FieldAttributes.Literal) != 0; }
81 public bool IsInitOnly
83 get {
return (Attributes & FieldAttributes.InitOnly) != 0; }
86 public bool IsNotSerialized
88 get {
return (Attributes & FieldAttributes.NotSerialized) != 0; }
91 public bool IsSpecialName
93 get {
return (Attributes & FieldAttributes.SpecialName) != 0; }
98 get {
return (Attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.Public; }
101 public bool IsPrivate
103 get {
return (Attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.Private; }
108 get {
return (Attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.Family; }
111 public bool IsFamilyOrAssembly
113 get {
return (Attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.FamORAssem; }
116 public bool IsAssembly
118 get {
return (Attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.Assembly; }
121 public bool IsFamilyAndAssembly
123 get {
return (Attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.FamANDAssem; }
126 public bool IsPinvokeImpl
128 get {
return (Attributes & FieldAttributes.PinvokeImpl) != 0; }
131 public virtual FieldInfo __GetFieldOnTypeDefinition()
136 public abstract bool __TryGetFieldOffset(out
int offset);
138 public bool __TryGetFieldMarshal(out FieldMarshal fieldMarshal)
140 return FieldMarshal.ReadFieldMarshal(this.
Module, GetCurrentToken(), out fieldMarshal);
143 internal abstract int ImportTo(Emit.ModuleBuilder module);
147 return new GenericFieldInstance(this.DeclaringType.BindTypeParameters(type),
this);
150 internal sealed override bool BindingFlagsMatch(BindingFlags flags)
152 return BindingFlagsMatch(IsPublic, flags, BindingFlags.Public, BindingFlags.NonPublic)
153 && BindingFlagsMatch(IsStatic, flags, BindingFlags.Static, BindingFlags.Instance);
156 internal sealed override bool BindingFlagsMatchInherited(BindingFlags flags)
158 return (Attributes & FieldAttributes.FieldAccessMask) > FieldAttributes.Private
159 && BindingFlagsMatch(IsPublic, flags, BindingFlags.Public, BindingFlags.NonPublic)
160 && BindingFlagsMatch(IsStatic, flags, BindingFlags.Static | BindingFlags.FlattenHierarchy, BindingFlags.Instance);
165 return new FieldInfoWithReflectedType(type,
this);
168 internal sealed override List<CustomAttributeData> GetPseudoCustomAttributes(
Type attributeType)
171 var list =
new List<CustomAttributeData>();
173 if (attributeType ==
null || attributeType.IsAssignableFrom(
Module.Universe.System_Runtime_InteropServices_MarshalAsAttribute))
174 if (__TryGetFieldMarshal(out var spec))
175 list.Add(CustomAttributeData.CreateMarshalAsPseudoCustomAttribute(module, spec));
177 if (attributeType ==
null || attributeType.IsAssignableFrom(
Module.Universe.System_Runtime_InteropServices_FieldOffsetAttribute))
178 if (__TryGetFieldOffset(out var offset))
179 list.Add(CustomAttributeData.CreateFieldOffsetPseudoCustomAttribute(module, offset));
IKVM.Reflection.Module Module
IKVM.Reflection.Type Type
IKVM.Reflection.FieldInfo FieldInfo
IKVM.Reflection.MemberInfo MemberInfo