• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c# 反射

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

//0、动态加载 程序集 文件 利用Assembly类

Assembly assembly = Assembly.LoadFile("c:\test.dll");
Type[] type = assembly.GetTypes(); //私有,公有所有类都能获取到
Type type_single = assembly.GetType("test.person"); //只拿到 指定的类 参数为“完全限定名称”。即 命名空间.类名
Type[] type_public = assembly.GetExportedTypes(); //只获取 公有 类型

//1、获取Type类型 两种方式

Person p=new Person ();
Type type1 = p.GetType(); //当有对象的时候 使用GetType
Type type2 = typeof(Person);//当没有对象的时候 使用typeof

//2、获取类型元数据 中的所有方法 (获取所有Public方法。包括属性方法和父类继承下来的方法。不包括私有方法。要获取私有方法需要使用其他方式)

MethodInfo[] methods=type2.GetMethods();
for (int i = 0; i < methods.Length; i++)
{
Console.WriteLine(methods[i].Name.ToString());
}

//调用方法 第一个参数需要通过反射创建对象

MethodInfo method_single = type2.GetMethod("SayHi"); //如果方法重载 则需要type2.GetMethod("SayHi",new Type[]{typeof(int),typeof(string)})
object obj = Activator.CreateInstance(type2); //第一个参数
object result = method_single.Invoke(obj, new object[] { 100, 200 }); //利用Invoke方法 带参数调用,不带参数 method_single.Invoke(obj,null);

//3、获取 类型元数据 中的所有属性

PropertyInfo[] properties= type2.GetProperties();
for (int i = 0; i < properties.Length; i++)
{
Console.WriteLine(properties[i].Name.ToString());
}
//属性赋值
PropertyInfo property = type2.GetProperty("Name");
object obj2 = Activator.CreateInstance(type2); //第一个参数
property.SetValue(obj2,"刘志新",null);
property.GetValue(obj2, null);//获取属性

//4、获取 类型元数据中 所有字段 (私有的获取不到)

FieldInfo[] fields=type2.GetFields();
for (int i = 0; i < fields.Length; i++)
{
Console.WriteLine(fields[i].Name.ToString());
}

 

//5、类中还有好多的东东,都可以通过.get 来获取。自己看吧


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#特性杂谈发布时间:2022-07-10
下一篇:
(二)C#数据绑定发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap