2003-10-17 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / class / corlib / System.Reflection / MonoEvent.cs
1 //
2 // System.Reflection/MonoEvent.cs
3 //
4 // Author:
5 //   Paolo Molaro (lupus@ximian.com)
6 //
7 // (C) 2001 Ximian, Inc.  http://www.ximian.com
8 //
9
10 using System;
11 using System.Reflection;
12 using System.Runtime.CompilerServices;
13 using System.Runtime.InteropServices;
14
15 namespace System.Reflection {
16         internal struct MonoEventInfo {
17                 public Type parent;
18                 public String name;
19                 public MethodInfo add_method;
20                 public MethodInfo remove_method;
21                 public MethodInfo raise_method;
22                 public EventAttributes attrs;
23                 
24                 [MethodImplAttribute(MethodImplOptions.InternalCall)]
25                 internal static extern void get_event_info (MonoEvent ev, out MonoEventInfo info);
26         }
27
28         internal sealed class MonoEvent: EventInfo {
29                 IntPtr klass;
30                 IntPtr handle;
31
32                 public override EventAttributes Attributes {
33                         get {
34                                 MonoEventInfo info;
35                                 MonoEventInfo.get_event_info (this, out info);
36                                 
37                                 return info.attrs;
38                         }
39                 }
40
41                 public override MethodInfo GetAddMethod(bool nonPublic) {
42                         MonoEventInfo info;
43                         MonoEventInfo.get_event_info (this, out info);
44                                 
45                         return info.add_method;
46                 }
47                 public override MethodInfo GetRaiseMethod( bool nonPublic) {
48                         MonoEventInfo info;
49                         MonoEventInfo.get_event_info (this, out info);
50                                 
51                         return info.raise_method;
52                 }
53                 public override MethodInfo GetRemoveMethod( bool nonPublic) {
54                         MonoEventInfo info;
55                         MonoEventInfo.get_event_info (this, out info);
56                                 
57                         return info.remove_method;
58                 }
59
60                 public override Type DeclaringType {
61                         get {
62                                 MonoEventInfo info;
63                                 MonoEventInfo.get_event_info (this, out info);
64                                 
65                                 return info.parent;
66                         }
67                 }
68                 public override Type ReflectedType {
69                         get {
70                                 MonoEventInfo info;
71                                 MonoEventInfo.get_event_info (this, out info);
72                                 
73                                 return info.parent;
74                         }
75                 }
76                 public override string Name {
77                         get {
78                                 MonoEventInfo info;
79                                 MonoEventInfo.get_event_info (this, out info);
80                                 
81                                 return info.name;
82                         }
83                 }
84         }
85 }