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);
             }
        }


 

相关文章
|
3天前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
|
1月前
|
存储 C# 索引
C# 一分钟浅谈:数组与集合类的基本操作
【9月更文挑战第1天】本文详细介绍了C#中数组和集合类的基本操作,包括创建、访问、遍历及常见问题的解决方法。数组适用于固定长度的数据存储,而集合类如`List<T>`则提供了动态扩展的能力。文章通过示例代码展示了如何处理索引越界、数组长度不可变及集合容量不足等问题,并提供了解决方案。掌握这些基础知识可使程序更加高效和清晰。
64 2
|
1月前
|
安全 C# 索引
C#一分钟浅谈:属性与索引器的定义
本文深入浅出地介绍了C#编程中的属性和索引器。属性让字段更安全,通过访问器方法在读写时执行额外操作,如验证数据有效性;索引器则赋予类数组般的访问方式,支持基于索引的数据访问模式。文章通过示例代码展示了如何定义及使用这两种特性,并提供了常见问题及其解决方案,帮助读者写出更健壮、易维护的代码。希望读者能从中学习到如何有效利用属性和索引器增强C#类的功能性。
64 12
|
1天前
|
Java 程序员 C#
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
5 0
|
1月前
|
C# 数据安全/隐私保护
C# 一分钟浅谈:类与对象的概念理解
【9月更文挑战第2天】本文从零开始详细介绍了C#中的类与对象概念。类作为一种自定义数据类型,定义了对象的属性和方法;对象则是类的实例,拥有独立的状态。通过具体代码示例,如定义 `Person` 类及其实例化过程,帮助读者更好地理解和应用这两个核心概念。此外,还总结了常见的问题及解决方法,为编写高质量的面向对象程序奠定基础。
17 2
|
2月前
|
Java C# 索引
C# 面向对象编程(一)——类
C# 面向对象编程(一)——类
30 0
|
5月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
171 3
|
5月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
182 3
|
19天前
|
API C#
C# 一分钟浅谈:文件系统编程
在软件开发中,文件系统操作至关重要。本文将带你快速掌握C#中文件系统编程的基础知识,涵盖基本概念、常见问题及解决方法。文章详细介绍了`System.IO`命名空间下的关键类库,并通过示例代码展示了路径处理、异常处理、并发访问等技巧,还提供了异步API和流压缩等高级技巧,帮助你写出更健壮的代码。
29 2
|
23天前
|
SQL 开发框架 安全
并发集合与任务并行库:C#中的高效编程实践
在现代软件开发中,多核处理器普及使多线程编程成为提升性能的关键。然而,传统同步模型在高并发下易引发死锁等问题。为此,.NET Framework引入了任务并行库(TPL)和并发集合,简化并发编程并增强代码可维护性。并发集合允许多线程安全访问,如`ConcurrentQueue&lt;T&gt;`和`ConcurrentDictionary&lt;TKey, TValue&gt;`,有效避免数据不一致。TPL则通过`Task`类实现异步操作,提高开发效率。正确使用这些工具可显著提升程序性能,但也需注意任务取消和异常处理等常见问题。
32 1