1 private void button2_Click(object sender, System.EventArgs e)
2 {
3 Assembly a = Assembly.LoadFile(@"C:\Reflection\Demo\bin\Debug\ReflectionDLL.dll");
4 Type t = a.GetType("ReflectionDLL.myObjects");
5 //创建实体
6
7 Object obj = Activator.CreateInstance(t);
8
9 //反射调用事件
10
11 EventInfo ei = t.GetEvent("Changed");
12 ei.AddEventHandler(obj,new ReflectionDLL.myObjects.MethodAEventHandler(obj_Changed));
13
14 //调用方法MethodA
15
16 MethodInfo mi = t.GetMethod("MethodA");
17 mi.Invoke(obj,new object[]{"id"});
18
19 //调用方法B
20 mi = t.GetMethod("MethodB");
21 DataSet ds = (DataSet)mi.Invoke(obj,null);
22 dataGrid1.DataSource = ds.Tables[0];
23 }
2 {
3 Assembly a = Assembly.LoadFile(@"C:\Reflection\Demo\bin\Debug\ReflectionDLL.dll");
4 Type t = a.GetType("ReflectionDLL.myObjects");
5 //创建实体
6
7 Object obj = Activator.CreateInstance(t);
8
9 //反射调用事件
10
11 EventInfo ei = t.GetEvent("Changed");
12 ei.AddEventHandler(obj,new ReflectionDLL.myObjects.MethodAEventHandler(obj_Changed));
13
14 //调用方法MethodA
15
16 MethodInfo mi = t.GetMethod("MethodA");
17 mi.Invoke(obj,new object[]{"id"});
18
19 //调用方法B
20 mi = t.GetMethod("MethodB");
21 DataSet ds = (DataSet)mi.Invoke(obj,null);
22 dataGrid1.DataSource = ds.Tables[0];
23 }
基本类
1 namespace ReflectionDLL
2 {
3 /// <summary>
4 /// myObjects 的摘要说明。
5 /// </summary>
6 public class myObjects
7 {
8 private string id;
9 public string Id
10 {
11 get { return id; }
12 set { id = value; }
13 }
14 public delegate void MethodAEventHandler(object sender, int i);
15 public event MethodAEventHandler Changed;
16 private DataSet CreateTable()
17 {
18 System.Data.DataTable myDataTable = new DataTable("ParentTable");
19 DataColumn myDataColumn;
20 DataRow myDataRow;
21 // Create new DataColumn, set DataType, ColumnName and add to DataTable.
22 myDataColumn = new DataColumn();
23 myDataColumn.DataType = System.Type.GetType("System.Int32");
24 myDataColumn.ColumnName = "id"
25 myDataColumn.ReadOnly = true;
26 myDataColumn.Unique = true;
27 // Add the Column to the DataColumnCollection.
28 myDataTable.Columns.Add(myDataColumn);
29
30 // Create second column.
31 myDataColumn = new DataColumn();
32 myDataColumn.DataType = System.Type.GetType("System.String");
33 myDataColumn.ColumnName = "ParentItem"
34 myDataColumn.AutoIncrement = false;
35 myDataColumn.Caption = "ParentItem"
36 myDataColumn.ReadOnly = false;
37 myDataColumn.Unique = false;
38 // Add the column to the table.
39 myDataTable.Columns.Add(myDataColumn);
40
41 // Make the ID column the primary key column.
42 DataColumn[] PrimaryKeyColumns = new DataColumn[1];
43 PrimaryKeyColumns[0] = myDataTable.Columns["id"];
44 myDataTable.PrimaryKey = PrimaryKeyColumns;
45
46 // Instantiate the DataSet variable.
47 DataSet myDataSet = new DataSet();
48 // Add the new DataTable to the DataSet.
49 myDataSet.Tables.Add(myDataTable);
50
51 // Create three new DataRow objects and add them to the DataTable
52 for (int i = 0; i<= 2; i++)
53 {
54 myDataRow = myDataTable.NewRow();
55 myDataRow["id"] = i;
56 myDataRow["ParentItem"] = "ParentItem " + i;
57 myDataTable.Rows.Add(myDataRow);
58 }
59
60 return myDataSet;
61 }
62
63 private void OnChange( int i )
64 {
65 if (Changed != null) Changed(this,i);
66 }
67
68 public myObjects()
69 {
70
71 }
72 public myObjects(string id)
73 {
74 }
75
76 public void MethodA(string id)
77 {
78 for (int i=0;i<100;i++)
79 {
80 OnChange(i);
81 }
82 }
83 public DataSet MethodB()
84 {
85 return CreateTable();
86 }
87 }
88 }
89
2 {
3 /// <summary>
4 /// myObjects 的摘要说明。
5 /// </summary>
6 public class myObjects
7 {
8 private string id;
9 public string Id
10 {
11 get { return id; }
12 set { id = value; }
13 }
14 public delegate void MethodAEventHandler(object sender, int i);
15 public event MethodAEventHandler Changed;
16 private DataSet CreateTable()
17 {
18 System.Data.DataTable myDataTable = new DataTable("ParentTable");
19 DataColumn myDataColumn;
20 DataRow myDataRow;
21 // Create new DataColumn, set DataType, ColumnName and add to DataTable.
22 myDataColumn = new DataColumn();
23 myDataColumn.DataType = System.Type.GetType("System.Int32");
24 myDataColumn.ColumnName = "id"
25 myDataColumn.ReadOnly = true;
26 myDataColumn.Unique = true;
27 // Add the Column to the DataColumnCollection.
28 myDataTable.Columns.Add(myDataColumn);
29
30 // Create second column.
31 myDataColumn = new DataColumn();
32 myDataColumn.DataType = System.Type.GetType("System.String");
33 myDataColumn.ColumnName = "ParentItem"
34 myDataColumn.AutoIncrement = false;
35 myDataColumn.Caption = "ParentItem"
36 myDataColumn.ReadOnly = false;
37 myDataColumn.Unique = false;
38 // Add the column to the table.
39 myDataTable.Columns.Add(myDataColumn);
40
41 // Make the ID column the primary key column.
42 DataColumn[] PrimaryKeyColumns = new DataColumn[1];
43 PrimaryKeyColumns[0] = myDataTable.Columns["id"];
44 myDataTable.PrimaryKey = PrimaryKeyColumns;
45
46 // Instantiate the DataSet variable.
47 DataSet myDataSet = new DataSet();
48 // Add the new DataTable to the DataSet.
49 myDataSet.Tables.Add(myDataTable);
50
51 // Create three new DataRow objects and add them to the DataTable
52 for (int i = 0; i<= 2; i++)
53 {
54 myDataRow = myDataTable.NewRow();
55 myDataRow["id"] = i;
56 myDataRow["ParentItem"] = "ParentItem " + i;
57 myDataTable.Rows.Add(myDataRow);
58 }
59
60 return myDataSet;
61 }
62
63 private void OnChange( int i )
64 {
65 if (Changed != null) Changed(this,i);
66 }
67
68 public myObjects()
69 {
70
71 }
72 public myObjects(string id)
73 {
74 }
75
76 public void MethodA(string id)
77 {
78 for (int i=0;i<100;i++)
79 {
80 OnChange(i);
81 }
82 }
83 public DataSet MethodB()
84 {
85 return CreateTable();
86 }
87 }
88 }
89