C#怎么操作泛型与属性字段
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇"C#怎么操作泛型与属性字段"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"C#怎
千家信息网最后更新 2024年09月22日C#怎么操作泛型与属性字段
这篇"C#怎么操作泛型与属性字段"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"C#怎么操作泛型与属性字段"文章吧。
一、使用方法
查找DLL文件,
通过Reflection反射类库里的各种方法来操作dll文件
二、步骤
加载DLL文件
Assembly assembly1 = Assembly.Load("SqlServerDB");//方式一:这个DLL文件要在启动项目下string filePath = Environment.CurrentDirectory + "";Assembly assembly2 = Assembly.LoadFile(filePath + @"\SqlServerDB.dll");//方式二:完整路径Assembly assembly3 = Assembly.LoadFrom(filePath + @"\SqlServerDB.dll");//方式三:完整路径Assembly assembly4 = Assembly.LoadFrom(@"SqlServerDB.dll");//方式三:完整路径
获取指定类型
foreach (var item in assembly4.GetTypes())//查找所有的类型,就是有多少个类{ Console.WriteLine(item.Name);}
获取构造函数
Type type = assembly4.GetType("SqlServerDB.ReflectionTest");//在ReflectionTest类中调用foreach (var ctor in type.GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)){ Console.WriteLine($"构造方法:{ctor.Name}"); foreach (var param in ctor.GetParameters()) { Console.WriteLine($"构造方法的参数:{param.ParameterType}"); }}//【3】实例化//ReflectionTest reflectionTest = new ReflectionTest();//这种实例化是知道具体类型--静态//object objTest = Activator.CreateInstance(type);//动态实例化--调用我们的构造方法object objTest1 = Activator.CreateInstance(type, new object[] { "string" });//动态实例化--调用我们的有参数构造方法//调用私有构造函数//ReflectionTest reflectionTest = new ReflectionTest(); //普通调用object objTest2 = Activator.CreateInstance(type, true);
调用非构造方法
object objTest2 = Activator.CreateInstance(type, true);//调用普通方法ReflectionTest reflectionTest = objTest2 as ReflectionTest;//as转换的好处,它不报错,类型不对的话就返回nullreflectionTest.Show1();//调用私有方法var method = type.GetMethod("Show2", BindingFlags.Instance | BindingFlags.NonPublic);method.Invoke(objTest2, new object[] { });
调用泛型方法
//泛型无参数var method3 = type.GetMethod("Show3");//查找指定方法var genericMethod = method3.MakeGenericMethod(new Type[] { typeof(int) });//指定泛型参数类型TgenericMethod.Invoke(objTest2, new object[] { });//泛型有参数var method4 = type.GetMethod("Show4");//查找指定方法var genericMethod4 = method4.MakeGenericMethod(new Type[] { typeof(string) });//指定泛型参数类型TgenericMethod4.Invoke(objTest2, new object[] { 123, "泛型string参数" });
反射测试类
位于SqlServerDB.dll中的ReflectionTest.cs文件中
////// 反射测试类 /// public class ReflectionTest { //私有构造函数 private ReflectionTest() { Console.WriteLine("这是私有无参数构造方法"); } //普通构造函数 //public ReflectionTest() //{ // Console.WriteLine("这是无参数构造方法"); //} public ReflectionTest(string name) { Console.WriteLine($"这是有参数构造方法+参数值是:{name}"); } public void Show1() { Console.WriteLine("调用普通方法", this.GetType()); } private void Show2() { Console.WriteLine("调用私有方法",this.GetType()); } public void Show3() { Console.WriteLine("调用无参数泛型方法", this.GetType()); } public void Show4 (int id,string name) { Console.WriteLine($"调用有参数泛型方法,参数是{id},{name}", this.GetType()); } }
操作泛型类和泛型方法
加载DLL文件
Assembly assembly = Assembly.LoadFrom(@"SqlServerDB.dll");
获取指定类型
Type type = assembly.GetType("SqlServerDB.GenericClass`2").MakeGenericType(typeof(int), typeof(string));//一定给定具体类型参数
调用泛型方法
object objTest2 = Activator.CreateInstance(type);var method = type.GetMethod("GenericMethod").MakeGenericMethod(typeof(int));method.Invoke(objTest2, new object[] { });
反射测试类
位于SqlServerDB.dll中的GenericClass.cs文件中
public class GenericClass{ public void GenericMethod () { Console.WriteLine("泛型类调用+泛型方法"); }}
操作类属性字段
加载DLL文件
Assembly assembly2 = Assembly.LoadFrom("SqlServerDB.dll");
获取指定类型
Type type2 = assembly2.GetType("SqlServerDB.PropertyClass");
调用泛型方法
object obj = Activator.CreateInstance(type2);foreach (var property in type2.GetProperties()){ Console.WriteLine(property.Name); //给属性设置值 if (property.Name.Equals("Id")) { property.SetValue(obj, 1); } else if (property.Name.Equals("Name")) { property.SetValue(obj, "学习编程"); } else if (property.Name.Equals("Phone")) { property.SetValue(obj, "123459789"); } //获取属性值 Console.WriteLine(property.GetValue(obj));}
反射测试类
位于SqlServerDB.dll中的PropertyClass.cs文件中
public class PropertyClass{ public int Id { get; set; } public string Name { get; set; } public string Phone { get; set; }}
以上就是关于"C#怎么操作泛型与属性字段"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
方法
参数
文件
类型
属性
内容
反射
私有
字段
普通
函数
实例
方式
测试
C#
路径
这是
动态
就是
文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
为切实加强网络安全
社工库用哪种数据库
服务器安装字体
电影网站的数据库设计问题
南京软件开发有哪些公司
嘉兴网站服务器怎么制作软件
河北智慧校园管理平台软件开发
流量卡服务器升级中
放心的仓库erp软件开发设计
如何建立政府文件数据库
sap财务系统用的是什么数据库
计算机网络技术的交互实时性
软件开发 行性分析
恢复代理服务器
云端服务器会监控吗
合肥专业的软件开发培训
广西玉林网络安全
40岁学网络技术晚不晚
什么芯片可以连接服务器
数据库加密常用技术
政府应急软件开发
数据库中如何设置数字范围
网络安全职业要求
江岸区电商网络安全维护条件
数据库关联语句命令
创建数据库对象时
创优网络技术服务有限公司
网络安全教育平台哪个好
棋牌游戏软件开发哪家好
上海自动化软件开发生产过程