c#利用反射Assembly 对类和成员属性进行操作

简介: protected static void test() { //获取程序集 Assembly assembly = System.
        protected static void test()
        {
            //获取程序集
            Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();//Assembly.LoadFrom("test.dll"); 

            //获取模块
            Module[] modules = assembly.GetModules();
            foreach (Module module in modules)
            {
                Console.WriteLine("module name:" + module.Name);
            } 

            //获取类
            Type type = assembly.GetType("Reflect_test.PurchaseOrderHeadManageModel", true, true); //命名空间名称 + 类名

            //创建类的实例
            object obj = Activator.CreateInstance(type, true);

            //获取私有字段
            FieldInfo[] myfields = type.GetFields(BindingFlags.NonPublic | BindingFlags.IgnoreCase | BindingFlags.Instance);
            for (int i = 0; i < myfields.Length; i++)
            {
                Console.WriteLine("字段名:{0},类型:{1}", myfields[i].Name, myfields[i].FieldType);
            }

            //获取公共属性
            PropertyInfo[] Propertys = type.GetProperties();
            for (int i = 0; i < Propertys.Length; i++)
            {
               // Propertys[i].SetValue(Propertys[i], i, null); //设置值
               // Propertys[i].GetValue(Propertys[i],null); //获取值
                Console.WriteLine("属性名:{0},类型:{1}",Propertys[i].Name,Propertys[i].PropertyType);
            }

            //构造函数集合
            ConstructorInfo[] myconstructors = type.GetConstructors();
            foreach (ConstructorInfo csinfo in myconstructors)
            {
                Console.WriteLine("ConstructorInfo:{0}",csinfo.Name);
                foreach (ParameterInfo pinfo in csinfo.GetParameters())//构造函数参数列表
                {
                    Console.WriteLine("Parameter:{0},{1}", pinfo.Name,pinfo.ParameterType);
                }
            }
            //公共方法,包括属性
            MethodInfo[] methods = type.GetMethods();
            foreach (MethodInfo method in methods)
            {
                //IsSpecialName:是否是属性
                if (!method.IsSpecialName) 
                {
                   // Console.WriteLine("类型:" + method.Attributes);
                    Console.WriteLine("method name:" + method.Name);
                }
            }
            
            //调用静态方法
            int result = (int)type.InvokeMember("StaticPlus", BindingFlags.InvokeMethod, null, null, new object[] {2,3 });
            Console.WriteLine("调用静态方法-结果是:{0}",result);

            //调用非静态方法
            result = (int)type.InvokeMember("Plus", BindingFlags.InvokeMethod, null, obj, new object[] { 3, 4 });
            Console.WriteLine("调用非静态方法-结果是:{0}",result);

             EventInfo[] Myevents=type.GetEvents();
             foreach (EventInfo einfo in Myevents)
             {
                 Console.WriteLine("事件:{0}", einfo.Name);
             }
        }


 

相关文章
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
464 8
|
存储 C# 索引
C# 一分钟浅谈:数组与集合类的基本操作
【9月更文挑战第1天】本文详细介绍了C#中数组和集合类的基本操作,包括创建、访问、遍历及常见问题的解决方法。数组适用于固定长度的数据存储,而集合类如`List<T>`则提供了动态扩展的能力。文章通过示例代码展示了如何处理索引越界、数组长度不可变及集合容量不足等问题,并提供了解决方案。掌握这些基础知识可使程序更加高效和清晰。
306 6
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
1158 12
|
程序员 C# 数据库
C# 比较对象新思路,利用反射技术打造更灵活的比较工具
中途接手的项目,碰到需要在更新对象信息时比较并记录差异的需求,最变态的还有附加要求,怎么办?有没有既能满足需求又能对项目影响最小的方法呢?分享这个我封装的方法,一个利用反射技术打造的更灵活的比较工具
244 5
|
安全 C# 索引
C#一分钟浅谈:属性与索引器的定义
本文深入浅出地介绍了C#编程中的属性和索引器。属性让字段更安全,通过访问器方法在读写时执行额外操作,如验证数据有效性;索引器则赋予类数组般的访问方式,支持基于索引的数据访问模式。文章通过示例代码展示了如何定义及使用这两种特性,并提供了常见问题及其解决方案,帮助读者写出更健壮、易维护的代码。希望读者能从中学习到如何有效利用属性和索引器增强C#类的功能性。
361 12
|
C# 数据安全/隐私保护
C# 一分钟浅谈:类与对象的概念理解
【9月更文挑战第2天】本文从零开始详细介绍了C#中的类与对象概念。类作为一种自定义数据类型,定义了对象的属性和方法;对象则是类的实例,拥有独立的状态。通过具体代码示例,如定义 `Person` 类及其实例化过程,帮助读者更好地理解和应用这两个核心概念。此外,还总结了常见的问题及解决方法,为编写高质量的面向对象程序奠定基础。
334 2
|
索引 C语言 存储
【C语言】B树和B+树的解析应用
【C语言】B树和B+树的解析应用
224 0
【C语言】B树和B+树的解析应用
|
Java 程序员 C#
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
177 0
|
6月前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
320 19
|
7月前
|
监控 算法 C#
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
1330 0