C#反射代碼

Object model=Assembly.Load(「程序集」).CreateInstance(命名空間.類名);數組

object obj2 = Type.GetType("MyClass").GetMethod("Add").Invoke(obj,null);app

obj2是返回值函數

 

 

Activator.CreateInstance會調用dll中類的構造函數,若是你的類裏面沒有提供無參的構造函數this

 

 

Assembly _Assembly = Assembly.Load("程序集名");
Type _Type = _Assembly.GetType("完整類名");
Form _Form = (Form)Activator.CreateInstance(_Type);
System.Reflection.EventInfo _EventInfo = _Type.GetEvent("RemoveFormHandler");

_EventInfo.AddEventHandler(_Form, new Com.Psi.UIBase.RemoveFormDelegate(RemoveForm));

System.Reflection.FieldInfo _FieldInfoSys = _Type.GetField("m_SysDataSet");
_FieldInfoSys.SetValue(_Form, this.m_TableDataSet);

_Form.Show()orm

 

 

//建立對象
            ////Assembly assembly = Assembly.LoadFile();
            //Assembly assembly = Assembly.Load("Test2");
            //Object obj1 = assembly.CreateInstance("Test2.Reflect.Operate", false);//assembly.CreateInstance內部調用Activator.CreateInstance
            //Object obj2 = assembly.CreateInstance("Test2.Reflect.Operate", false, BindingFlags.Default, Type.DefaultBinder, new Object[] { "123" }, System.Globalization.CultureInfo.CurrentCulture, new Object[] { });

            //Object obj3 = Activator.CreateInstance(Type.GetType("Test2.Reflect.Operate"));
            //Object obj4 = Activator.CreateInstance(Type.GetType("Test2.Reflect.Operate"),"456");

            //Type type = Type.GetType("Test2.Reflect.Operate");
            ////每次調用InvokeMemeber方法時,它必須先綁定到一個特定的成員,而後才能調用它。
            ////若是每次調用一個成員時都讓綁定器選擇適當的成員,那麼將是很是耗時的。。建議用:一次綁定,屢次調用
            //Object obj5 = type.InvokeMember("Operate", BindingFlags.CreateInstance, null, null, new Object[] { "789" });
            
            //Assembly assembly = Assembly.Load("Test2");
            //Type t = assembly.GetType("Test2.Reflect.Operate");
            //ConstructorInfo constructorInfo = t.GetConstructor(new Type[] { typeof(string) });
            //Object obj6 = constructorInfo.Invoke(new Object[] { "kkkkkkkk" });

            //AppDomain appDomain = AppDomain.CurrentDomain;  //內部也是調用的Activator.CreateInstance
            //ObjectHandle objHandle = appDomain.CreateInstance("Test2", "Test2.Reflect.Operate");
            //Object obj7 = objHandle.Unwrap();

            //除了數組和委託以外,其餘均可以利用上述經過反射建立對象

            //訪問變量
            //Assembly assembly = Assembly.Load("Test2");
            //Object obj1 = assembly.CreateInstance("Test2.Reflect.Operate", false);
            //Type type = Type.GetType("Test2.Reflect.Operate");
            //FieldInfo fieldInfo = type.GetField("_Address");  //獲取私有字段  ("_Address",BindingFlags.NoPublic|bindingFlags.instance)
            //Object ret= fieldInfo.GetValue(obj1);對象


     //私有靜態字段,BindingFlags的次序必須一致。FieldInfo fieldInfo = type.GetField("_instance", BindingFlags.Static | BindingFlags.NonPublic);blog


            //屬性
            //Assembly assembly = Assembly.Load("Test2");
            //Object obj1 = assembly.CreateInstance("Test2.Reflect.Operate", false);
            //Type type = Type.GetType("Test2.Reflect.Operate");
            //PropertyInfo propertyInfo = type.GetProperty("Val");
            //propertyInfo.SetValue(obj1, 1, null); //爲屬性賦值
            //Object ret = propertyInfo.GetValue(obj1, null);//獲取屬性的值

            //索引器
            //Assembly assembly = Assembly.Load("Test2");
            //Object obj1 = assembly.CreateInstance("Test2.Reflect.Operate", false);
            //Type type = Type.GetType("Test2.Reflect.Operate");
            //PropertyInfo propertyInfo = type.GetProperty("Item");
            //Object ret = propertyInfo.GetValue(obj1,new Object[]{2});   //獲取索引器的值
            //propertyInfo.SetValue(obj1, 1,new Object[]{6});             //爲索引器賦值
            //ret = propertyInfo.GetValue(obj1, new Object[] { 6 });      //獲取索引器的值
           

            //訪問靜態方法
            //Assembly assembly = Assembly.Load("Test2");
            //Type t = assembly.GetType("Test2.Reflect.Operate");
            //MethodInfo met = t.GetMethod("ExcStaticMethod", new Type[] { typeof(string) });
            //Object ret = met.Invoke(null, new Object[] { "參數" });

            //Type t = Type.GetType("Test2.Reflect.Operate");//若是在同一個項目中或已經添加引用
            //MethodInfo met = t.GetMethod("ExcStaticMethod", new Type[] { typeof(string) });
            //Object ret = met.Invoke(null, new Object[] { "傳遞的參數" });
          
            //訪問方法
            //Assembly assembly = Assembly.Load("Test2");
            //Object obj1 = assembly.CreateInstance("Test2.Reflect.Operate", false);
            //Type t = assembly.GetType("Test2.Reflect.Operate");
            //MethodInfo met = t.GetMethod("ExcMethod", new Type[] {typeof(string) });
            //Object ret = met.Invoke(obj1, new Object[] {"參數" });

            //事件
            //Assembly assemblytemp = Assembly.Load("Test2");
            //Object objtemp = assemblytemp.CreateInstance("Test2.Reflect.Operate", false);
            //Type te = Type.GetType("Test2.Reflect.Operate");
            //EventInfo evnetInfo = te.GetEvent("hander");
            ////EventHandler eh = new EventHandler(delegate(Object obj,EventArgs e) { Console.WriteLine("LLLLLLL"); });
            //EventHandler eh = new EventHandler(delegate { Console.WriteLine("LLLLLLL"); });
            //evnetInfo.AddEventHandler(objtemp, eh);
            //MethodInfo met = te.GetMethod("ExcEvent", new Type[] { });
            //Object ret = met.Invoke(objtemp, new Object[] {  });索引

相關文章
相關標籤/搜索