[反射]通用方法 命名空间,类,对象,属性
2017-08-31 11:30
465 查看
反射后的类型基础通用类
反射类映射显示
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace Reflection_Test { public class DLLAnalyst { private string fileName; public string FileName { get { return fileName; } set { fileName = value; this.myAssembly = Assembly.LoadFile(this.fileName); } } private Assembly myAssembly = null; public DLLAnalyst() { } public DLLAnalyst(string fileName) { this.fileName = fileName; this.myAssembly = Assembly.LoadFile(this.fileName); } public List<string> GetNameSpaces() { if (this.myAssembly == null) return null; List<string> list = new List<string>(); Type[] types = this.myAssembly.GetTypes(); foreach (Type type in types) { if (!list.Contains(type.Namespace)) { list.Add(type.Namespace); } } return list; } public List<ClassInfo> GetClasses() { if (string.IsNullOrEmpty(this.fileName)) return null; List<ClassInfo> list = new List<ClassInfo>(); Type[] types = this.myAssembly.GetTypes(); foreach (Type type in types) { ClassInfo classInfo = new ClassInfo(); classInfo.NameSpace = type.Namespace; classInfo.Name = type.Name; classInfo.FullName = type.FullName; classInfo.Type = type; list.Add(classInfo); } return list; } //public List<MethodInfo> GetMethodByClass(ClassInfo classInfo) //{ // if (this.myAssembly == null) return null; // MethodInfo[] methods = classInfo.Type.GetMethods(); // List<MethodInfo> list = new List<MethodInfo>(); // list.AddRange(methods); // return list; //} } public class ClassInfo { private string nameSpace; public string NameSpace { get { return nameSpace; } set { nameSpace = value; } } private string name; public string Name { get { return name; } set { name = value; } } private string fullName; public string FullName { get { return fullName; } set { fullName = value; } } private Type type; public Type Type { get { return type; } set { type = value; } } public ClassInfo() { } public ClassInfo(string nameSpace, string name,string fullName,Type type) { this.nameSpace = nameSpace; this.name = name; this.fullName = fullName; this.type = type; } } }
反射类映射显示
private void btnLoad_Click(object sender, EventArgs e) { OpenFileDialog openDlg = new OpenFileDialog(); openDlg.Filter = "动态库文件(*.dll)|*.dll|可执行文件(*.exe)|*.exe"; if (openDlg.ShowDialog() == DialogResult.OK) { string fileName = openDlg.FileName; DLLAnalyst analyst = new DLLAnalyst(fileName); List<string> nameSpaces= analyst.GetNameSpaces(); this.tvClass.Nodes.Clear(); List<ClassInfo> classes = analyst.GetClasses(); foreach (string nameSpace in nameSpaces) { TreeNode treeNode = this.tvClass.Nodes.Add(nameSpace); foreach (ClassInfo classInfo in classes) { if (classInfo.NameSpace == nameSpace) { TreeNode nodeClass = treeNode.Nodes.Add(classInfo.Name); nodeClass.Tag = classInfo; } } } } }
相关文章推荐
- 【laravel5.4】PHP5.6+ 调用命名空间下类方法、属性和对象
- 面向对象进阶 01 对象、类、属性,方法、命名空间
- 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间
- PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
- js对象、构造函数、命名空间、方法、属性
- js对象、构造函数、命名空间、方法、属性
- java使用反射给对象属性赋值的两种方法
- 积少成多Flash ActionScript 3.0(2) - 基础之包、类、包外类、命名空间、属性、方法、接口和继承
- 反射的对象的属性,方法
- window对象的属性方法名造成的命名冲突
- C#反射实例——获取及设置对象属性,运行对象方法
- js之prototype用法(给对象添加通用属性/方法)
- 用反射来在方法里获取泛型对象的属性
- 【JS--基础--对象】--基础用法(通用的Object属性和方法)
- 【初学笔记】利用反射、泛类思想操作对象的属性和方法的一种方案
- 基础复习------命名空间导入及访问类对象方法
- [java]反射机制给属性使用set方法构造对象
- 反射示例3:写一个方法设置对象任意权限的属性的值
- 转:用反射调用对象的私有属性和方法(经典)
- 积少成多Flash ActionScript 3.0(2) - 基础之包、类、包外类、命名空间、属性、方法、接口和继承