[小技巧]C# 反射
创始人
2024-01-28 20:52:47
0

文章目录

  • 定义
  • Namespace
  • 场景
  • 示例
    • 简单反射一个==对象==进行操作
    • 反射一个==有参构造函数的对象==
    • 反射一个==泛型类型的对象==
    • 简单反射一个==方法==进行操作
    • 反射一个==泛型方法==进行操作
    • 反射一个静态(Static)方法

定义

反射提供描述程序集、模块和类型的对象(Type 类型)。 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型,然后调用其方法或访问器字段和属性。 如果代码中使用了特性,可以利用反射来访问它们。

Namespace

using System;
using System.Reflection; 

场景

反射一般用于动态工厂,主要用于根据配置的数据信息反射出操作对象,动态加载对象进行逻辑处理等。

示例

简单反射一个对象进行操作

  • 显示效果
    在这里插入图片描述
  • 代码
  private void button6_Click(object sender, EventArgs e){var 一个配置类型名称 = "一些可行性想法的验证测试.TT";var type = Assembly.GetExecutingAssembly().GetType(一个配置类型名称);var t = Activator.CreateInstance(type);MessageBox.Show(t.GetType().FullName);}//单独写一个类public class TT{public string Name { get; set; } = "TEST";}

反射一个有参构造函数的对象

主要就是上述方式,在最后一个方法中需要添加object[] 类型的参数

object[] para=new object[]{1,2,3}
Activator.CreateInstance(type,para)

反射一个泛型类型的对象

  • 反射代码块
   var types = Assembly.GetAssembly(this.GetType()).GetTypes();var type = types.FirstOrDefault(t => t.Name == "People`1");var paraTypes = types.Where(t => t.Name == "TT").ToArray();type = type.MakeGenericType(paraTypes);var s = Activator.CreateInstance(type);
  • People类
  public class People where T : TT, new(){public People(string id){}public T Get(int id){var t = new T();return t;}public static string GETRT(Type trtype, TX tx){return tx.ToString();}public static string GETRT(Type trtype){return "11";}public static TX GETRT(TR trtype, TX i, params object[] others){return default(TX);}}

简单反射一个方法进行操作

  • 显示效果
    -在这里插入图片描述
  • 代码
public class TT{public string Name { get; set; } = "TEST";public void Msg(string name){MessageBox.Show("Hello " + name);}}
  • 反射部分代码
 private void button7_Click(object sender, EventArgs e){var 一个配置类型名称 = "一些可行性想法的验证测试.TT";var type = Assembly.GetExecutingAssembly().GetType(一个配置类型名称);var t = Activator.CreateInstance(type);var method = t.GetType().GetMethod("Msg");method.Invoke(t, new object[] { "张三" });}

反射一个泛型方法进行操作

  • 反射部分代码块
#region 反射泛型对象var types = Assembly.GetAssembly(this.GetType()).GetTypes();var type = types.FirstOrDefault(t => t.Name == "People`1");var paraTypes = types.Where(t => t.Name == "TT").ToArray();type = type.MakeGenericType(paraTypes);var s = Activator.CreateInstance(type);
#endregion     #region 反射泛型方法var method = s.GetType().GetMethod("GETRT", new Type[] { typeof(Type) });method = method.MakeGenericMethod(new Type[] { typeof(string), typeof(object) });var r = method.Invoke(null, new object[] { typeof(string), 0 });MessageBox.Show(r.ToString());
#endregion

上述代码中用到的Penple类见上面。

反射一个静态(Static)方法

接上面代码,静态方法 就是在invoke时不需要指定第一个参数

  var r = method.Invoke(null, new object[] { typeof(string), 0 });

相关内容

热门资讯

拍抖音视频怎么挣钱,一个人用抖...   观看视频      目前市面上有很多看视频赚钱的软件,也很杂。Tik Tok快递版可以说是比较...
打工女性不做餐饮该做什么行业,...   谁说女人不如男人?在餐饮行业,很多知名的女性餐饮人已经登上了行业的巅峰,掌握了成千上万人的职业命...
青浦房价趋势,2009青浦房价...   买房是典型的低频交易。一般七年左右换一次房,买房子间隔时间长。第一次刚买房子的经验,不能应用到换...
证券开通创业板需要什么条件,创...         4月27日(昨日),中国证监会、深交所发布《创业板首次公开发行股票注册管理办法(试行...
文具店网店创业计划书,文具店创...   从Ipad开始      2018铅笔已经用了半个月了。最初,它是用来学习做笔记的。对比评估了几...
去海南的利弊,海南创业之旅 去...   最近越来越多的进出口贸易公司咨询海南的政策,在海南创业,都看好海南自贸港的未来发展,为自己的创业...
五个适合穷人创业项目,32岁创...   农村创业需要创业激情和创业理念。现在内需不断扩大。创业需要与市场需求相结合,为事物提供市场消费偏...
大学生创业新颖的点子,校园化妆...   化妆品专营店,作为目前最热门的创业项目,作为一个什么都不懂的创业者,首先应该了解相关知识,尤其是...
真实穷人创业的电视剧,关于贫穷...   2018年有一部电视剧叫《甜蜜暴击》,至今在豆瓣还有2.7分的历史。剧情震撼无需多说,但有一幕已...
野心才能创业成功,创业志向远大...   如何区分野心和个人野心?(修订草案)董卿      拿破仑说,不想当元帅的士兵不是好士兵。这已经...