DotNet框架:System.Reflection

这篇文章我们来学习System.Reflection,.net中反射的核心类.先来看图:

 

前面的文章,我们说过.net的元数据可以完整地描述类型,那么通过System.Reflection,可以在运行时发现类型格式,我们来看一下元数据:

 

源代码:

 

复制代码
 class Class2
        
{
            
            
private int x;
            
private int y;
            
public Class2(int a, int b)
            
{
                x 
= a;
                y 
= b;
            }

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

        }
复制代码

 

1.Assembly:主要是加载和操纵一个程序集.

2.ParameterInfo:该类保存给定参数的信息,也就是说方法的参数,可以用该类来操作.

3.Module:访问带有多文件程序集的给定模块,可以认为就是命名空间.

4.MemberInfo:该类是抽象基类,为他的子类定义了公共的行为.如MemberTypes,MemberName等.而他的子类则分别是方法,属性,字段,事件等信息的具体实现.

 

那么这些类如何来完成类型的反射呢?

 

复制代码
 Assembly asm = Assembly.Load("Test");//dll的名称
            Type t = asm.GetType("Test.Class2");//类的完全命名
            object obj = Activator.CreateInstance(t); //创建Class2的实例
            MethodInfo mi = t.GetMethod("Add");//获取Class2中Add方法的信息.
            string s = (string)mi.Invoke(obj,null);//执行方法,需要参数1:Class2的实例,2:方法的参数列表.
           
            FieldInfo pi 
= t.GetField("x"); //获取字段信息
            pi.GetValue(obj); //得到字段值
复制代码

 

事件和属性的反射调用,同上述代码差不多,不再赘述.上面的代码中我们使用了Type这个类型,这里做一下简单的介绍

System.Type定义了大量的成员,可以用来检查一个类型的元数据,如GetMethod,GetFields等方法,基本上一个类型的所有信息都可以得到

 

posted @   94cool  阅读(246)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
< 2010年3月 >
28 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10
点击右上角即可分享
微信分享提示