2003-10-17 Pedro Mart�nez Juli� <yoros@wanadoo.es>
[mono.git] / mcs / class / corlib / System.Reflection / FieldInfo.cs
1 //
2 // System.Reflection.FieldInfo.cs
3 //
4 // Author:
5 //   Miguel de Icaza (miguel@ximian.com)
6 //
7 // (C) Ximian, Inc.  http://www.ximian.com
8 //
9 // TODO: Mucho left to implement.
10 //
11
12 using System;
13 using System.Reflection;
14 using System.Reflection.Emit;
15 using System.Globalization;
16 using System.Runtime.CompilerServices;
17
18 namespace System.Reflection {
19
20         [Serializable]
21         public abstract class FieldInfo : MemberInfo {
22
23                 public abstract FieldAttributes Attributes {get;}
24                 public abstract RuntimeFieldHandle FieldHandle {get;}
25
26                 public abstract Type FieldType { get; }
27
28                 public abstract object GetValue(object obj);
29
30                 public override MemberTypes MemberType {
31                         get { return MemberTypes.Field;}
32                 }
33
34                 public bool IsLiteral
35                 {
36                         get {return (Attributes & FieldAttributes.Literal) != 0;}
37                 } 
38
39                 public bool IsStatic
40                 {
41                         get {return (Attributes & FieldAttributes.Static) != 0;}
42                 } 
43
44                 public bool IsInitOnly
45                 {
46                         get {return (Attributes & FieldAttributes.InitOnly) != 0;}
47                 } 
48                 public Boolean IsPublic
49                 { 
50                         get
51                         {
52                                 return (Attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.Public;
53                         }
54                 }
55                 public Boolean IsPrivate
56                 {
57                         get
58                         {
59                                 return (Attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.Private;
60                         }
61                 }
62                 public Boolean IsFamily
63                 {
64                         get
65                         {
66                                 return (Attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.Family;
67                         }
68                 }
69                 public Boolean IsAssembly
70                 {
71                         get
72                         {
73                                 return (Attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.Assembly;
74                         }
75                 }
76                 public Boolean IsFamilyAndAssembly
77                 {
78                         get {
79                                 return (Attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.FamANDAssem;
80                         }
81                 }
82                 public Boolean IsFamilyOrAssembly
83                 {
84                         get
85                         {
86                                 return (Attributes & FieldAttributes.FieldAccessMask) == FieldAttributes.FamORAssem;
87                         }
88                 }
89                 public Boolean IsPinvokeImpl
90                 {
91                         get
92                         {
93                                 return (Attributes & FieldAttributes.PinvokeImpl) == FieldAttributes.PinvokeImpl;
94                         }
95                 }
96                 public Boolean IsSpecialName
97                 {
98                         get
99                         {
100                                 return (Attributes & FieldAttributes.SpecialName) == FieldAttributes.SpecialName;
101                         }
102                 }
103                 public Boolean IsNotSerialized
104                 {
105                         get
106                         {
107                                 return (Attributes & FieldAttributes.NotSerialized) == FieldAttributes.NotSerialized;
108                         }
109                 }
110
111                 public abstract void SetValue (object obj, object val, BindingFlags invokeAttr, Binder binder, CultureInfo culture);
112
113                 public void SetValue (object obj, object value)
114                 {
115                         SetValue (obj, value, 0, null, null);
116                 }
117
118                 [MethodImplAttribute(MethodImplOptions.InternalCall)]
119                 private static extern FieldInfo internal_from_handle (IntPtr handle);
120
121                 public static FieldInfo GetFieldFromHandle (RuntimeFieldHandle handle)
122                 {
123                         return internal_from_handle (handle.Value);
124                 }
125         }
126 }