zl程序教程

您现在的位置是:首页 >  其他

当前栏目

解析如何使用反射调用类型成员方法,字段,属性

属性方法反射 使用 如何 解析 类型 调用
2023-06-13 09:15:01 时间
如下所示:
复制代码代码如下:

   classProgram
   {
       staticvoidMain(string[]args)
       {
           Typet=typeof(Test);
           objectresult;
           Testtc=newTest();
           Console.WriteLine("Invokeastaticmethod");
           t.InvokeMember("Sayhello",BindingFlags.InvokeMethod|BindingFlags.Static|BindingFlags.Public,null,null,newobject[]{});
           Console.WriteLine("------------------------");
           Console.WriteLine("Invokeagenericmethod");
           List<string>list=newList<string>();
           list.Add("GuoHu");
           list.Add("LeiHu");
           //WeshouldassigntheparametertypetogenericmethodByusingMakeGenericMethod
           MethodInfomi=t.GetMethod("Print").MakeGenericMethod(typeof(string));
           mi.Invoke(null,newobject[]{list});
           Console.WriteLine("------------------------");
           Console.WriteLine("Invokeainstancemethod");
           MethodInfom=t.GetMethod("Swap");
           object[]obj=newobject[2];
           obj[0]=123;
           obj[1]=230;
           m.Invoke(newTest(),obj);
           Console.WriteLine("{0},{1}",obj[0],obj[1]);
           Console.WriteLine("------------------------");
           Console.WriteLine("outputfieldname");
           FieldInfo[]fi=t.GetFields();
           foreach(FieldInfonameinfi)
           {
               Console.WriteLine("{0}",name);
           }
           Console.WriteLine("------------------------");
           Console.WriteLine("Invokeamethodwithnamedparameters");
           object[]argValues=newobject[]{"Guo","Hu"};
           String[]argNames=newString[]{"lastName","firstName"};
           t.InvokeMember("PrintName",BindingFlags.InvokeMethod,null,null,argValues,null,null,argNames);
           Console.WriteLine("------------------------");
           Console.WriteLine("Getafieldvalue");
           result=t.InvokeMember("Name",BindingFlags.GetField|BindingFlags.GetProperty,null,tc,newobject[]{});
           Console.WriteLine("Name=={0}",result);
           Console.WriteLine("------------------------");
           Console.WriteLine("Setafieldvalue");
           t.InvokeMember("Name",BindingFlags.SetField,null,tc,newobject[]{"Newvalue"});
           result=t.InvokeMember("Name",BindingFlags.GetField|BindingFlags.GetProperty,null,tc,newobject[]{});
           Console.WriteLine("Name=={0}",result);
       }
   }
   classTest
   {
       publicstringName;
       publicTest()
       {
           Name="InitilizeName";
       }
       publicstaticvoidSayhello()
       {
           Console.WriteLine("Sayhello");
       }
       publicstaticvoidPrint<T>(IEnumerable<T>item)
       {
           foreach(Ttinitem)
           {
               Console.WriteLine("{0}",t);
           }
       }
       publicstaticvoidPrintName(StringfirstName,StringlastName)
       {
           Console.WriteLine("{0},{1}",lastName,firstName);
       }
       publicvoidSwap(refinta,refintb)
       {
           intx=a;
           a=b;
           b=x;
       }
   }