2004-01-25 Martin Baulig <martin@ximian.com>
[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
17         internal struct MonoEventInfo {
18                 public Type parent;
19                 public String name;
20                 public MethodInfo add_method;
21                 public MethodInfo remove_method;
22                 public MethodInfo raise_method;
23                 public EventAttributes attrs;
24                 
25                 [MethodImplAttribute(MethodImplOptions.InternalCall)]
26                 internal static extern void get_event_info (MonoEvent ev, out MonoEventInfo info);
27         }
28
29         internal sealed class MonoEvent: EventInfo {
30                 IntPtr klass;
31                 IntPtr handle;
32
33                 public override EventAttributes Attributes {
34                         get {
35                                 MonoEventInfo info;
36                                 MonoEventInfo.get_event_info (this, out info);
37                                 
38                                 return info.attrs;
39                         }
40                 }
41
42                 public override MethodInfo GetAddMethod(bool nonPublic) {
43                         MonoEventInfo info;
44                         MonoEventInfo.get_event_info (this, out info);
45                                 
46                         return info.add_method;
47                 }
48
49                 public override MethodInfo GetRaiseMethod( bool nonPublic) {
50                         MonoEventInfo info;
51                         MonoEventInfo.get_event_info (this, out info);
52                                 
53                         return info.raise_method;
54                 }
55
56                 public override MethodInfo GetRemoveMethod( bool nonPublic) {
57                         MonoEventInfo info;
58                         MonoEventInfo.get_event_info (this, out info);
59                                 
60                         return info.remove_method;
61                 }
62
63                 public override Type DeclaringType {
64                         get {
65                                 MonoEventInfo info;
66                                 MonoEventInfo.get_event_info (this, out info);
67                                 
68                                 return info.parent;
69                         }
70                 }
71
72                 public override Type ReflectedType {
73                         get {
74                                 MonoEventInfo info;
75                                 MonoEventInfo.get_event_info (this, out info);
76                                 
77                                 return info.parent;
78                         }
79                 }
80
81                 public override string Name {
82                         get {
83                                 MonoEventInfo info;
84                                 MonoEventInfo.get_event_info (this, out info);
85                                 
86                                 return info.name;
87                         }
88                 }
89
90                 public override string ToString () {
91                         return EventHandlerType + " " + Name;
92                 }
93
94         }
95 }