虽说args必须也null,威尼斯人官网二、带一个参数的

运用反射调用方法:

一旦明白一个档所支撑之不二法门,就可本着艺术举行调用。调用时,需用含在

相同、不带来参数的

 

威尼斯人官网 1using System;
威尼斯人官网 2using System.Collections.Generic;
威尼斯人官网 3using System.Text;
威尼斯人官网 4using System.Threading;
威尼斯人官网 5
威尼斯人官网 6namespace AAAAAA
威尼斯人官网 7{
威尼斯人官网 8    class AAA
威尼斯人官网 9    {
威尼斯人官网 10        public static void Main()
威尼斯人官网 11        {
威尼斯人官网 12            Thread t = new Thread(new ThreadStart(A));
威尼斯人官网 13            t.Start();
威尼斯人官网 14
威尼斯人官网 15            Console.Read();
威尼斯人官网 16        }
威尼斯人官网 17
威尼斯人官网 18        private static void A()
威尼斯人官网 19        {
威尼斯人官网 20            Console.WriteLine(“Method A!”);
威尼斯人官网 21        }
威尼斯人官网 22    }
威尼斯人官网 23}

MethodInfo中的Invoke()方法。调用情势:

复制代码

 

 

object Invoke(object ob, object[]
args)

      结果呈现Method A!

 

其次、带一个参数的

这里ob是一个目标引用,将调用它所对的靶子上的措施。对于静态方法,ob必须也null。

     由于ParameterizedThreadStart要求参数类型必须为object,所以定义的法子B形参类型必须也object。

 

威尼斯人官网 24using System;
威尼斯人官网 25using System.Collections.Generic;
威尼斯人官网 26using System.Text;
威尼斯人官网 27using System.Threading;
威尼斯人官网 28
威尼斯人官网 29namespace AAAAAA
威尼斯人官网 30{
威尼斯人官网 31    class AAA
威尼斯人官网 32    {
威尼斯人官网 33        public static void Main()
威尼斯人官网 34        {         
威尼斯人官网 35            Thread t = new Thread(new ParameterizedThreadStart(B));
威尼斯人官网 36            t.Start(“B”);
威尼斯人官网 37
威尼斯人官网 38            Console.Read();
威尼斯人官网 39        }
威尼斯人官网 40
威尼斯人官网 41        private static void B(object obj)
威尼斯人官网 42        {
威尼斯人官网 43            Console.WriteLine(“Method {0}!”,obj.ToString ());
威尼斯人官网 44
威尼斯人官网 45        }
威尼斯人官网 46    }
威尼斯人官网 47}

富有需要传递让方的参数还必于args数组中指定。如若情势无待参数,则args必须为null。

复制代码

 

 

其它,数组args的素数量参数必须顶参数的数额。Invoke()方法再次回到给调用方法的归来值。

 结果彰显Method B!

 

老三、带两只参数的

如果调用某个方法,只待以一个MethodInfo实例上调用Invoke(),该实例通过调用

     由于Thread默认只提供了即有限栽构造函数,要是用传递五只参数,大家可自己拿参数作为类的习性。定义类的目的下实例化这多少个特性,然后举办操作。

GetMethods()

威尼斯人官网 48using System;
威尼斯人官网 49using System.Collections.Generic;
威尼斯人官网 50using System.Text;
威尼斯人官网 51using System.Threading;
威尼斯人官网 52
威尼斯人官网 53namespace AAAAAA
威尼斯人官网 54{
威尼斯人官网 55    class AAA
威尼斯人官网 56    {
威尼斯人官网 57        public static void Main()
威尼斯人官网 58        {
威尼斯人官网 59            My m = new My();
威尼斯人官网 60            m.x = 2;
威尼斯人官网 61            m.y = 3;
威尼斯人官网 62
威尼斯人官网 63            Thread t = new Thread(new ThreadStart(m.C));
威尼斯人官网 64            t.Start();
威尼斯人官网 65
威尼斯人官网 66            Console.Read();
威尼斯人官网 67        }
威尼斯人官网 68    }
威尼斯人官网 69
威尼斯人官网 70    class My
威尼斯人官网 71    {
威尼斯人官网 72        public int x, y;
威尼斯人官网 73
威尼斯人官网 74        public void C()
威尼斯人官网 75        {
威尼斯人官网 76            Console.WriteLine(“x={0},y={1}”, this.x, this.y);
威尼斯人官网 77        }
威尼斯人官网 78    }
威尼斯人官网 79}

 

复制代码

方赢得。请看事例:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace Reflection
{
    class Program
    {
        static void Main(string[] args)
        {
           // Demo1();
            InvokeMethDemo();
            Console.ReadKey();
        }

     结果突显x=2,y=3

     

季、利用结构体给参数传值。

        static void InvokeMethDemo()
        {
            //拿到MyClass的类型队形
            Type t = typeof(MyClass);

概念公用的public
struct,里面可以定义自己索要的参数,然后在急需丰裕线程的时段,可以定义结构体的实例。

            MyClass reflectOb = new MyClass(10, 20);

威尼斯人官网 80//结构体
威尼斯人官网 81  struct RowCol
威尼斯人官网 82    {
威尼斯人官网 83        public int row;
威尼斯人官网 84        public int col;
威尼斯人官网 85    };
威尼斯人官网 86
威尼斯人官网 87//定义方法
威尼斯人官网 88 public void Output(Object rc)
威尼斯人官网 89        {
威尼斯人官网 90            RowCol rowCol = (RowCol)rc;
威尼斯人官网 91            for (int i = 0; i < rowCol.row; i++)
威尼斯人官网 92            {
威尼斯人官网 93                for (int j = 0; j < rowCol.col; j++)
威尼斯人官网 94                    Console.Write(“{0} “, _char);
威尼斯人官网 95                Console.Write(“\n”);
威尼斯人官网 96            }
威尼斯人官网 97        }

            Console.WriteLine(“类名:{0}”, t.Name);

复制代码

            Console.WriteLine(“本类所提供的方法暴发:”);

            MethodInfo[] mi = t.GetMethods();

            int val;

            foreach (MethodInfo m in mi)
            {
                Console.WriteLine();
             

                //呈现参数
                ParameterInfo[] pi = m.GetParameters();

                if (m.Name == “Set” && pi[0].ParameterType == typeof(int))
                {
                    Console.Write(“Set(int,int)  “);
                    object[] args = new object[2];

                    args[0] = 9;
                    args[1] = 18;

                    m.Invoke(reflectOb, args);
                }
                else if (m.Name == “Set” && pi[0].ParameterType == typeof(double))
                {
                    Console.Write(“Set(double,double)  “);
                    object[] args = new object[2];

                    args[0] = 2.34;
                    args[1] = 13.56;

                    m.Invoke(reflectOb, args);
                }
                else if (m.Name.CompareTo(“Sum”) == 0) {
                    Console.Write(“Sum() “);
                    val = (int)m.Invoke(reflectOb, null);

                    Console.WriteLine(“Sum is {0}”,val);
                }
                else if(m.Name.CompareTo(“IsBetween”)==0)
                {
                    object[] args = new object[1];

                    args[0] = 17;

                    if ((bool)m.Invoke(reflectOb, args))
                    {
                        Console.WriteLine(“{0}在x和y之间”,args[0]);
                    }
                }
                Console.WriteLine();
            }
        }
    }
}

class MyClass
{
    int x;
    int y;

    public MyClass(int i, int j)
    {
        x = i;
        y = j;
    }

    public int Sum()
    {
        return x + y;
    }

    public bool IsBetween(int i)
    {
        if (x < i && i < y)
            return true;
        else
            return false;
    }

    public void Set(int a, int b)
    {
        x = a;
        y = b;

        Show();
    }

    public void Set(double a, double b)
    {
        x = (int)a;
        y = (int)b;

        Show();
    }

    public void Show()
    {
        Console.WriteLine(“x:{0},y:{1}”, x, y);
    }
}
运行结果如下:

威尼斯人官网 98 

 

相关文章