C#怎么操作泛型与属性字段
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇"C#怎么操作泛型与属性字段"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"C#怎
千家信息网最后更新 2025年01月18日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安全错误
数据库的锁怎样保障安全
及时排查网络安全
access数据库 使用
服务器莫名其妙被封号
使用计算机网络技术答疑解惑
网络安全ots
wap软件开发工程师
衢州工业软件开发费用
学生网络安全教育总结
网络安全倡议书的目的
网络技术专升本真题
数据库基础 王珊 pdf
软件开发专业跨专业
烟台宝易网络技术
软件开发工程师有几个证
内存数据库架构
拼多多网络安全审查
平常打电话移动服务器上还保存吗
没有flexnet许可证服务器
农发行网络安全活动
网络安全这门课程好学吗
阿里云性能服务器资源价格
apache安装到云服务器
信息网络安全无安全事故
廊坊胶吨网络技术有限公司
红米10x小白数据库
cdh 服务器配置
汇智创想软件开发
华南理工 数据库考试
更改金蝶服务器的ip地址
江苏省商务厅网站数据库