3 // Sean MacIsaac (macisaac@ximian.com)
4 // Paolo Molaro (lupus@ximian.com)
6 // (C) 2001 Ximian, Inc.
8 using System.Reflection;
9 using System.Runtime.CompilerServices;
10 using System.Globalization;
14 internal struct MonoTypeInfo {
16 public string name_space;
19 public Assembly assembly;
20 public TypeAttributes attrs;
23 public bool ispointer;
24 public bool isprimitive;
27 internal class MonoType : Type
30 [MethodImplAttribute(MethodImplOptions.InternalCall)]
31 private static extern void type_from_obj (MonoType type, Object obj);
33 [MethodImplAttribute(MethodImplOptions.InternalCall)]
34 private static extern void get_type_info (RuntimeTypeHandle type, out MonoTypeInfo info);
37 internal MonoType (Object obj) {
38 // this should not be used - lupus
39 type_from_obj (this, obj);
40 throw new NotImplementedException ();
43 [MethodImplAttribute(MethodImplOptions.InternalCall)]
44 private static extern TypeAttributes get_attributes (Type type);
46 protected override TypeAttributes GetAttributeFlagsImpl () {
47 return get_attributes (this);
51 protected override ConstructorInfo GetConstructorImpl (BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) {
52 throw new NotImplementedException ();
55 [MethodImplAttribute(MethodImplOptions.InternalCall)]
56 public extern override ConstructorInfo[] GetConstructors (BindingFlags bindingAttr);
59 public override EventInfo GetEvent (string name, BindingFlags bindingAttr) {
60 throw new NotImplementedException ();
63 [MethodImplAttribute(MethodImplOptions.InternalCall)]
64 public extern override EventInfo[] GetEvents (BindingFlags bindingAttr);
66 public override FieldInfo GetField( string name, BindingFlags bindingAttr) {
71 [MethodImplAttribute(MethodImplOptions.InternalCall)]
73 public extern override FieldInfo[] GetFields (BindingFlags bindingAttr);
75 public override Type GetInterface (string name, bool ignoreCase) {
76 throw new NotImplementedException ();
79 [MethodImplAttribute(MethodImplOptions.InternalCall)]
81 public extern override Type[] GetInterfaces();
83 public override MemberInfo[] GetMembers( BindingFlags bindingAttr) {
85 throw new NotImplementedException ();
88 [MethodImplAttribute(MethodImplOptions.InternalCall)]
89 public extern override MethodInfo[] GetMethods (BindingFlags bindingAttr);
91 protected override MethodInfo GetMethodImpl( string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) {
96 public override Type GetNestedType( string name, BindingFlags bindingAttr) {
101 public override Type[] GetNestedTypes (BindingFlags bindingAttr) {
106 [MethodImplAttribute(MethodImplOptions.InternalCall)]
107 public extern override PropertyInfo[] GetProperties( BindingFlags bindingAttr);
109 protected override PropertyInfo GetPropertyImpl( string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers) {
114 protected override bool HasElementTypeImpl () {
115 return IsArrayImpl() || IsByRefImpl() || IsPointerImpl ();
118 protected override bool IsArrayImpl () {
119 return type_is_subtype_of (this, typeof (System.Array), false);
121 protected override bool IsByRefImpl () {
123 get_type_info (_impl, out info);
126 protected override bool IsCOMObjectImpl () {
129 protected override bool IsPointerImpl () {
131 get_type_info (_impl, out info);
132 return info.ispointer;
134 protected override bool IsPrimitiveImpl () {
136 get_type_info (_impl, out info);
137 return info.isprimitive;
139 protected override bool IsValueTypeImpl () {
140 return type_is_subtype_of (this, typeof (System.ValueType), false) &&
141 this != typeof (System.ValueType) &&
142 this != typeof (System.Enum);
145 public override object InvokeMember( string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters) {
150 public override Type GetElementType()
153 get_type_info (_impl, out info);
157 public override Type UnderlyingSystemType {
160 get_type_info (_impl, out info);
165 public override Assembly Assembly {
168 get_type_info (_impl, out info);
169 return info.assembly;
173 public override string AssemblyQualifiedName {
175 return getFullName () + "," + Assembly.ToString ();
179 [MethodImplAttribute(MethodImplOptions.InternalCall)]
180 private extern string getFullName();
182 public override Type BaseType {
185 get_type_info (_impl, out info);
190 public override string FullName {
192 return getFullName ();
196 public override Guid GUID {
197 get {return Guid.Empty;}
200 public override bool IsDefined (Type attributeType, bool inherit)
202 return MonoCustomAttrs.IsDefined (this, attributeType, inherit);
205 public override object[] GetCustomAttributes (bool inherit)
207 return MonoCustomAttrs.GetCustomAttributes (this, inherit);
210 public override object[] GetCustomAttributes (Type attributeType, bool inherit)
212 return MonoCustomAttrs.GetCustomAttributes (this, attributeType, inherit);
215 public override MemberTypes MemberType {
217 return MemberTypes.TypeInfo;
221 public override string Name {
224 get_type_info (_impl, out info);
229 public override string Namespace {
232 get_type_info (_impl, out info);
233 return info.name_space;
237 public override Module Module {
243 public override Type ReflectedType {
249 public override RuntimeTypeHandle TypeHandle {
255 public override int GetArrayRank () {
257 get_type_info (_impl, out info);