千家信息网

C#怎么操作泛型与属性字段

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇"C#怎么操作泛型与属性字段"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"C#怎
千家信息网最后更新 2026年11月02日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安全错误 数据库的锁怎样保障安全 中关村互联网 科技集团 美国互联网保险保险科技 互联网与科技金融数据 互联网科技公司怎么样 互联网科技小额贷款 苏州大垚互联网科技 掌上梦互联网科技 大白互联网科技 深圳卡尔迅互联网科技有限公司怎么样 华脉科技工业互联网产品 深圳前海聚择互联网科技有限公司 深圳国际航运科技和互联网 团飞科技与伯堂互联网服务平台 智腾互联网科技有限公司 互联网科技公司实习生 互联网金融科技展 洛阳共同富裕互联网科技有限公司 江苏互联网智能科技产品出厂价 互联网公司属于科技吗 广东猫王互联网科技有限公司电话 什么是科技互联网 互联网科技公司排名 百单网互联网科技有限公司怎么样 互联网与科技金融数据 现代科技和互联网有关系吗 银川新华互联网科技职业技术培训学校图片 岳阳华臻互联网科技有限公司 广东鹅鹅鹅互联网科技有限公司 互联网领先科技活动 平安好医生打造互联网科技医疗
0