C# 反射入门

反射 别的用处先不管,至少在WinForm登录后的权限控制上有大用,比如登录后的窗体左侧树,点击通过字符串创建出窗体实例

案例如下图 

AssTest类很简单

namespace assemblyTest
{
public class AssTest
{

public string Name{ get; set; }
public int Age { get; set;}

public string GetAssTest()
{
return string.Format("I Am {0}, i'm {1} years old", Name, Age);
}

public int SumAB(int a, int b)
{ return a + b; }
}
}

控制台程序

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Assembly asb= Assembly.Load("assemblyTest");//类库信息

            Type type = asb.GetType("assemblyTest.AssTest");//类的类型

            object asstest = asb.CreateInstance("assemblyTest.AssTest");//创建类的对像

           Form frmTest= (Form)asb.CreateInstance("assemblyTest.frmTest");//创建窗体的对像 类库中加了个窗体 这里也可以0.0


            //属性赋值
            type.GetProperty("Name").SetValue(asstest, "小王");
            type.GetProperty("Age").SetValue(asstest, 18);

            MethodInfo mi = type.GetMethod("GetAssTest");//找到方法
            Console.WriteLine( mi.Invoke(asstest,null)) ;//调用并输出

            mi = type.GetMethod("SumAB");
            object sumab = mi.Invoke(asstest, new object[] { 1, 2 });
            Console.WriteLine(sumab);//调用并输出


            frmTest.ShowDialog();//显示窗体

            Console.ReadKey();
        }
    }
}

 结果

//全路径
            Assembly asm = Assembly.LoadFile(@"D:我的项目vsSWIESoftWare权限管理Test1inDebugModel.dll");//FullPath

            //取类型
            Type t = asm.GetType("Model.AA_User");

            //生成对象
            object u = Activator.CreateInstance(t);

            //查找对像属性
            PropertyInfo p = t.GetProperty("Code");
            p.SetValue(u, "123");

            //取属性值
            object getproperty = t.GetProperty("Code").GetValue(u, null);  //方法一
            object getproperty1 = u.GetType().GetProperty("Code").GetValue(u, null); //方法二
View Code
原文地址:https://www.cnblogs.com/SoftWareIe/p/8952922.html