// Miguel de Icaza (miguel@ximian.com)
//
// (C) Ximian, Inc. http://www.ximian.com
-//
-// TODO: Mucho left to implement.
-//
-
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-using System;
using System.Diagnostics;
-using System.Reflection;
using System.Reflection.Emit;
using System.Globalization;
using System.Runtime.CompilerServices;
namespace System.Reflection {
+#if NET_2_0
+ [ComVisible (true)]
+ [ComDefaultInterfaceAttribute (typeof (_FieldInfo))]
+#endif
[Serializable]
- [ClassInterface(ClassInterfaceType.AutoDual)]
- public abstract class FieldInfo : MemberInfo {
+ [ClassInterface(ClassInterfaceType.None)]
+ public abstract class FieldInfo : MemberInfo, _FieldInfo {
+
public abstract FieldAttributes Attributes {get;}
public abstract RuntimeFieldHandle FieldHandle {get;}
}
}
- public abstract void SetValue (object obj, object val, BindingFlags invokeAttr, Binder binder, CultureInfo culture);
+ public abstract void SetValue (object obj, object value, BindingFlags invokeAttr, Binder binder, CultureInfo culture);
+
+#if ONLY_1_1
+ public new Type GetType ()
+ {
+ return base.GetType ();
+ }
+#endif
[DebuggerHidden]
[DebuggerStepThrough]
}
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern FieldInfo internal_from_handle (IntPtr handle);
+ private static extern FieldInfo internal_from_handle_type (IntPtr field_handle, IntPtr type_handle);
public static FieldInfo GetFieldFromHandle (RuntimeFieldHandle handle)
{
- return internal_from_handle (handle.Value);
+ if (handle.Value == IntPtr.Zero)
+ throw new ArgumentException ("The handle is invalid.");
+ return internal_from_handle_type (handle.Value, IntPtr.Zero);
+ }
+
+#if NET_2_0
+ [ComVisible (false)]
+ public static FieldInfo GetFieldFromHandle (RuntimeFieldHandle handle, RuntimeTypeHandle declaringType)
+ {
+ if (handle.Value == IntPtr.Zero)
+ throw new ArgumentException ("The handle is invalid.");
+ return internal_from_handle_type (handle.Value, declaringType.Value);
+ }
+#endif
+
+ //
+ // Note: making this abstract imposes an implementation requirement
+ // on any class that derives from it. However, since it's also
+ // internal, that means only classes inside corlib can derive
+ // from FieldInfo. See
+ //
+ // errors/cs0534-4.cs errors/CS0534-4-lib.cs
+ //
+ // class/Microsoft.JScript/Microsoft.JScript/JSFieldInfo.cs
+ //
+ internal virtual int GetFieldOffset ()
+ {
+ throw new SystemException ("This method should not be called");
}
[CLSCompliant(false)]
- [MonoTODO]
+ [MonoTODO("Not implemented")]
public virtual object GetValueDirect (TypedReference obj)
{
throw new NotImplementedException ();
}
[CLSCompliant(false)]
- [MonoTODO]
+ [MonoTODO("Not implemented")]
public virtual void SetValueDirect (TypedReference obj, object value)
{
throw new NotImplementedException ();
}
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private extern UnmanagedMarshal GetUnmanagedMarshal ();
+
+ internal virtual UnmanagedMarshal UMarshal {
+ get {
+ return GetUnmanagedMarshal ();
+ }
+ }
+
+ internal object[] GetPseudoCustomAttributes ()
+ {
+ int count = 0;
+
+ if (IsNotSerialized)
+ count ++;
+
+ if (DeclaringType.IsExplicitLayout)
+ count ++;
+
+ UnmanagedMarshal marshalAs = UMarshal;
+ if (marshalAs != null)
+ count ++;
+
+ if (count == 0)
+ return null;
+ object[] attrs = new object [count];
+ count = 0;
+
+ if (IsNotSerialized)
+ attrs [count ++] = new NonSerializedAttribute ();
+ if (DeclaringType.IsExplicitLayout)
+ attrs [count ++] = new FieldOffsetAttribute (GetFieldOffset ());
+ if (marshalAs != null)
+ attrs [count ++] = marshalAs.ToMarshalAsAttribute ();
+
+ return attrs;
+ }
+
#if NET_2_0 || BOOTSTRAP_NET_2_0
- public abstract FieldInfo Mono_GetGenericFieldDefinition ();
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]
+ extern Type[] GetTypeModifiers (bool optional);
+
+ public virtual Type[] GetOptionalCustomModifiers () {
+ Type[] types = GetTypeModifiers (true);
+ if (types == null)
+ return Type.EmptyTypes;
+ return types;
+ }
+
+ public virtual Type[] GetRequiredCustomModifiers () {
+ Type[] types = GetTypeModifiers (false);
+ if (types == null)
+ return Type.EmptyTypes;
+ return types;
+ }
+
+ public virtual object GetRawConstantValue ()
+ {
+ throw new NotSupportedException ("This non-CLS method is not implemented.");
+ }
#endif
+
+ void _FieldInfo.GetIDsOfNames ([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId)
+ {
+ throw new NotImplementedException ();
+ }
+
+ void _FieldInfo.GetTypeInfo (uint iTInfo, uint lcid, IntPtr ppTInfo)
+ {
+ throw new NotImplementedException ();
+ }
+
+ void _FieldInfo.GetTypeInfoCount (out uint pcTInfo)
+ {
+ throw new NotImplementedException ();
+ }
+
+ void _FieldInfo.Invoke (uint dispIdMember, [In] ref Guid riid, uint lcid, short wFlags, IntPtr pDispParams, IntPtr pVarResult, IntPtr pExcepInfo, IntPtr puArgErr)
+ {
+ throw new NotImplementedException ();
+ }
}
}