4 // System.Reflection/MonoProperty.cs
5 // The class used to represent Properties from the mono runtime.
8 // Paolo Molaro (lupus@ximian.com)
10 // (C) 2001 Ximian, Inc. http://www.ximian.com
14 using System.Globalization;
15 using System.Runtime.CompilerServices;
16 using System.Runtime.InteropServices;
18 namespace System.Reflection {
20 internal struct MonoPropertyInfo {
23 public MethodInfo get_method;
24 public MethodInfo set_method;
25 public PropertyAttributes attrs;
27 [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
28 internal static extern void get_property_info (MonoProperty prop, out MonoPropertyInfo info);
31 internal class MonoProperty : PropertyInfo {
32 internal IntPtr klass;
35 public override PropertyAttributes Attributes {
37 MonoPropertyInfo info;
38 MonoPropertyInfo.get_property_info (this, out info);
42 public override bool CanRead {
44 MonoPropertyInfo info;
45 MonoPropertyInfo.get_property_info (this, out info);
46 return (info.get_method != null);
49 public override bool CanWrite {
51 MonoPropertyInfo info;
52 MonoPropertyInfo.get_property_info (this, out info);
53 return (info.set_method != null);
58 public override Type PropertyType {
60 MonoPropertyInfo info;
61 MonoPropertyInfo.get_property_info (this, out info);
63 if (info.get_method != null) {
64 return info.get_method.ReturnType;
66 // FIXME: take the last param to set_method
71 public override Type ReflectedType {
73 MonoPropertyInfo info;
74 MonoPropertyInfo.get_property_info (this, out info);
78 public override Type DeclaringType {
80 MonoPropertyInfo info;
81 MonoPropertyInfo.get_property_info (this, out info);
85 public override string Name {
87 MonoPropertyInfo info;
88 MonoPropertyInfo.get_property_info (this, out info);
94 public override MethodInfo[] GetAccessors( bool nonPublic) {
95 // FIXME: check nonPublic
96 MonoPropertyInfo info;
98 MonoPropertyInfo.get_property_info (this, out info);
99 if (info.set_method != null)
101 if (info.get_method != null)
103 MethodInfo[] res = new MethodInfo [n];
105 if (info.set_method != null)
106 res [n++] = info.set_method;
107 if (info.get_method != null)
108 res [n++] = info.get_method;
113 public override MethodInfo GetGetMethod( bool nonPublic) {
114 // FIXME: check nonPublic
115 MonoPropertyInfo info;
116 MonoPropertyInfo.get_property_info (this, out info);
117 return info.get_method;
119 public override ParameterInfo[] GetIndexParameters() {
120 MonoPropertyInfo info;
121 MonoPropertyInfo.get_property_info (this, out info);
122 if (info.get_method != null)
123 return info.get_method.GetParameters ();
124 return new ParameterInfo [0];
126 public override MethodInfo GetSetMethod( bool nonPublic) {
127 // FIXME: check nonPublic
128 MonoPropertyInfo info;
129 MonoPropertyInfo.get_property_info (this, out info);
130 return info.set_method;
132 public override bool IsDefined (Type attribute_type, bool inherit) {
136 public override object[] GetCustomAttributes( bool inherit) {
139 public override object[] GetCustomAttributes( Type attributeType, bool inherit) {
142 public override object GetValue( object obj, BindingFlags invokeAttr, Binder binder, object[] index, CultureInfo culture) {
145 public override void SetValue( object obj, object value, BindingFlags invokeAttr, Binder binder, object[] index, CultureInfo culture) {