C#反射实例No.1
1 创建用于反射使用的DLL
新建一个C#类库项目,拷贝源代码如下,编译生成DLL(假如DLL的文件名是TestReflect.dll)
 1 using System;
using System;
2
3 namespace Webtest
namespace Webtest
4 {
{
5 /// <summary>
 /// <summary>
6 /// ReflectTest 的摘要说明。
 /// ReflectTest 的摘要说明。
7 /// </summary>
 /// </summary>
8 public class ReflectTest
 public class ReflectTest
9 {
 {
10 public ReflectTest()
  public ReflectTest()
11 {}
  {}
12
13 public string WriteString(string s)
  public string WriteString(string s)
14 {
  {
15 return "欢迎您," + s;
   return "欢迎您," + s;
16 }
  }
17
18 /// <summary>
  /// <summary>
19 /// dsajkjflasjdfalksdjfaskfd
  /// dsajkjflasjdfalksdjfaskfd
20 /// </summary>
  /// </summary>
21 /// <param name="s"></param>
  /// <param name="s"></param>
22 /// <returns></returns>
  /// <returns></returns>
23 public static string WriteName(string s)
  public static string WriteName(string s)
24 {
  {
25 return "欢迎您光临," + s;
   return "欢迎您光临," + s;
26 }
  }
27
28 public string WriteNoPara()
  public string WriteNoPara()
29 {
  {
30 return "您使用的是无参数方法";
   return "您使用的是无参数方法";
31 }
  }
32 }
 }
33 }
}
34
35
36
 using System;
using System;2

3
 namespace Webtest
namespace Webtest4
 {
{5
 /// <summary>
 /// <summary>6
 /// ReflectTest 的摘要说明。
 /// ReflectTest 的摘要说明。7
 /// </summary>
 /// </summary>8
 public class ReflectTest
 public class ReflectTest9
 {
 {10
 public ReflectTest()
  public ReflectTest()11
 {}
  {}12

13
 public string WriteString(string s)
  public string WriteString(string s)14
 {
  {15
 return "欢迎您," + s;
   return "欢迎您," + s;16
 }
  }17

18
 /// <summary>
  /// <summary>19
 /// dsajkjflasjdfalksdjfaskfd
  /// dsajkjflasjdfalksdjfaskfd20
 /// </summary>
  /// </summary>21
 /// <param name="s"></param>
  /// <param name="s"></param>22
 /// <returns></returns>
  /// <returns></returns>23
 public static string WriteName(string s)
  public static string WriteName(string s)24
 {
  {25
 return "欢迎您光临," + s;
   return "欢迎您光临," + s;26
 }
  }27

28
 public string WriteNoPara()
  public string WriteNoPara()29
 {
  {30
 return "您使用的是无参数方法";
   return "您使用的是无参数方法";31
 }
  }32
 }
 }33
 }
}34

35

36

2 应用于反射的例子
在ASPNET页面中加入以下函数:
 1 public void test1()
public void test1()
2 {
  {
3 System.Reflection.Assembly ass;
   System.Reflection.Assembly ass;
4 Type type ;
   Type type ;
5 object obj;
   object obj;
6 try
   try
7 {
   {
8 ass = System.Reflection.Assembly.LoadFile(@"d:\TestReflect.dll");
    ass = System.Reflection.Assembly.LoadFile(@"d:\TestReflect.dll");
9 type = ass.GetType("Webtest.ReflectTest");//必须使用名称空间+类名称
    type = ass.GetType("Webtest.ReflectTest");//必须使用名称空间+类名称
10 System.Reflection.MethodInfo method = type.GetMethod("WriteString");//方法的名称
    System.Reflection.MethodInfo method = type.GetMethod("WriteString");//方法的名称
11 obj = ass.CreateInstance("Webtest.ReflectTest");//必须使用名称空间+类名称
    obj = ass.CreateInstance("Webtest.ReflectTest");//必须使用名称空间+类名称
12 string s = (string)method.Invoke(obj,new string[]{"jianglijun"}); //实例方法的调用
    string s = (string)method.Invoke(obj,new string[]{"jianglijun"}); //实例方法的调用
13 
   
14 Response.Write(s+"<br>");
    Response.Write(s+"<br>");
15 method = type.GetMethod("WriteName");//方法的名称
    method = type.GetMethod("WriteName");//方法的名称
16 s = (string)method.Invoke(null,new string[]{"jianglijun"}); //静态方法的调用
    s = (string)method.Invoke(null,new string[]{"jianglijun"}); //静态方法的调用
17 Response.Write(s+"<br>");
    Response.Write(s+"<br>");
18
19 method = type.GetMethod("WriteNoPara");//无参数的实例方法
    method = type.GetMethod("WriteNoPara");//无参数的实例方法
20 s = (string)method.Invoke(obj,null);
    s = (string)method.Invoke(obj,null);
21 Response.Write(s+"<br>");
    Response.Write(s+"<br>");
22 method = null;
    method = null;
23 }
   }
24 catch(Exception ex)
   catch(Exception ex)
25 {
   {
26 Response.Write(ex+"<br>");
    Response.Write(ex+"<br>");
27 }
   }
28 finally
   finally
29 {
   {
30 ass = null;
    ass = null;
31 type = null;
    type = null;
32 obj = null;
    obj = null;
33 }
   }
34 }
  }
35
 public void test1()
public void test1()2
 {
  {3
 System.Reflection.Assembly ass;
   System.Reflection.Assembly ass;4
 Type type ;
   Type type ;5
 object obj;
   object obj;6
 try
   try7
 {
   {8
 ass = System.Reflection.Assembly.LoadFile(@"d:\TestReflect.dll");
    ass = System.Reflection.Assembly.LoadFile(@"d:\TestReflect.dll");9
 type = ass.GetType("Webtest.ReflectTest");//必须使用名称空间+类名称
    type = ass.GetType("Webtest.ReflectTest");//必须使用名称空间+类名称10
 System.Reflection.MethodInfo method = type.GetMethod("WriteString");//方法的名称
    System.Reflection.MethodInfo method = type.GetMethod("WriteString");//方法的名称11
 obj = ass.CreateInstance("Webtest.ReflectTest");//必须使用名称空间+类名称
    obj = ass.CreateInstance("Webtest.ReflectTest");//必须使用名称空间+类名称12
 string s = (string)method.Invoke(obj,new string[]{"jianglijun"}); //实例方法的调用
    string s = (string)method.Invoke(obj,new string[]{"jianglijun"}); //实例方法的调用13
 
   14
 Response.Write(s+"<br>");
    Response.Write(s+"<br>");15
 method = type.GetMethod("WriteName");//方法的名称
    method = type.GetMethod("WriteName");//方法的名称16
 s = (string)method.Invoke(null,new string[]{"jianglijun"}); //静态方法的调用
    s = (string)method.Invoke(null,new string[]{"jianglijun"}); //静态方法的调用17
 Response.Write(s+"<br>");
    Response.Write(s+"<br>");18

19
 method = type.GetMethod("WriteNoPara");//无参数的实例方法
    method = type.GetMethod("WriteNoPara");//无参数的实例方法20
 s = (string)method.Invoke(obj,null);
    s = (string)method.Invoke(obj,null);21
 Response.Write(s+"<br>");
    Response.Write(s+"<br>");22
 method = null;
    method = null;23
 }
   }24
 catch(Exception ex)
   catch(Exception ex)25
 {
   {26
 Response.Write(ex+"<br>");
    Response.Write(ex+"<br>");27
 }
   }28
 finally
   finally29
 {
   {30
 ass = null;
    ass = null;31
 type = null;
    type = null;32
 obj = null;
    obj = null;33
 }
   }34
 }
  }35

    -----------------------------------------------------------------
 
                    
                
 


 
  
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号