zoukankan      html  css  js  c++  java
  • c# 中反射里的invoke方法的参数

    
    
    一个最简单的C#反射实例,首先编写类库如下:
    namespace ReflectionTest
    { 
    public class WriteTest 
    { 
    //带参数的公共方法
    public void WriteString(string s, int i) 
    { 
    Console.WriteLine("WriteString:" + s + i.ToString()); 
    } 
    //带一个参数的静态方法
    public static void StaticWriteString(string s)
    { 
    Console.WriteLine("StaticWriteString:" + s); 
    } 
    //不带参数的静态方法
    public static void NoneParaWriteString() 
    { 
    Console.WriteLine("NoParaWriteString"); 
    } 
    } 
    }

    控制台程序项目如下:

    class TestApp
    { 
    public static void Main() 
    { 
    Assembly ass; 
    Type type; 
    Object obj; 
    //用来测试静态方法
    Object any = new Object(); 
    //指定类库文件必须使用绝对路径,不能使用相对路径
    ass = Assembly.LoadFile(@"D:Source Code0.C#Sudy1.Reflection1ReflectTest.dll"); 
    //命名空间和类的名字必须一起指定 
    type = ass.GetType("ReflectionTest.WriteTest"); 
    /**//*example1---------*/ 
    MethodInfo method = type.GetMethod("WriteString"); 
    string test = "test"; 
    int i = 1; 
    Object[] parametors = new Object[]{test,i}; 
    //在例子1种必须实例化反射要反射的类,因为要使用的方法并不是静态方法。
    //创建对象实例
    obj = ass.CreateInstance("ReflectionTest.WriteTest"); //执行带参数的公共方法
    method.Invoke(obj, parametors); 
    //method.Invoke(any, parametors);//异常:必须实例化反射要反射的类,因为要使用的方法并不是静态方法。
    /**//*example2----------*/ 
    method = type.GetMethod("StaticWriteString"); 
    method.Invoke(null, new string[] { "test"}); //第一个参数忽略//对于第一个参数是无视的,也就是我们写什么都不会被调用,
    //即使我们随便new了一个any这样的Object,当然这种写法是不推荐的。
    //但是对应在例子1种我们如果Invoke的时候用了类型不一致的实例来做为参数的话,将会导致一个运行时的错误。
    method.Invoke(obj, new string[] { "test"});
    method.Invoke(any, new string[] { "test"});
    /**//*example3-----------*/ 
    method = type.GetMethod("NoneParaWriteString"); //调用无参数静态方法的例子,这时候两个参数我们都不需要指定,用null就可以了。method.Invoke(null, null); 
    } 
    }
  • 相关阅读:
    CALayer 的一些重要属性
    [Google] Inorder Successor in Binary Search Tree, Solution
    [LeetCode] Container With Most Water, Solution
    [C++ Summary]
    [LeetCode] Count and Say, Solution
    [LeetCode] Construct Binary Tree from Preorder and Inorder Traversal, Solution
    [LeetCode] Convert Sorted List to Binary Search Tree, Solution
    [FaceBook] Hanoi Moves, Solution
    逻辑题汇总
    [Facebook] Products of all elements
  • 原文地址:https://www.cnblogs.com/engineerlm/p/7290318.html
Copyright © 2011-2022 走看看