C# 反射的使用及场景

1,使用反映将一个对象的同名属性赋值给另一个对象

2, DataTable 转换成一个实体

3,使用反射动态执行方法

4,根据属性信息来执行对应的方法

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Windows.Forms;namespace WindowsFormsApp2
{public partial class FrmReflection : Form{public FrmReflection(){InitializeComponent();}private void FrmReflection_Load(object sender, EventArgs e){//反射的使用场景//1,使用反映将一个对象的同名属性赋值给另一个对象PA pA = new PA();pA.ID = 3;pA.Name = "PAName1";pA.Remark = "PARemark";PB pB = ToPageInfo<PB>(pA);MessageBox.Show(pB.Name);//2,DataTable 转换成一个实体DataTable dt = new DataTable();dt.Columns.Add("ID", typeof(int) );dt.Columns.Add("Name", typeof(string));dt.Columns.Add("Remark", typeof(string));DataRow dr = dt.NewRow();dr["ID"] = 1;dr["Name"] = "PaName2";dt.Rows.Add(dr);List<PA> pAs = GetValue<PA>(dt);MessageBox.Show(pAs[0].Name);//3,使用反射动态执行方法Assembly assembly = Assembly.GetExecutingAssembly();Type[] t = assembly.GetTypes(); //通过Assembly获取程序集中所有的类://Assembly assembly1 = Assembly.LoadFrom("QRCoder.dll");//通过DLL文件全名反射其中的所有类型Type[] t1 = assembly.GetTypes(); //通过Assembly获取程序指定dll集中所有的类:/Assembly ass = Assembly.Load("WindowsFormsApp2");//通过程序集的名称反射Type t2 = ass.GetType("WindowsFormsApp2.FrmReflection");//命名空间+类object o = Activator.CreateInstance(t2, null, null);//实例一个对象MethodInfo mi = t2.GetMethod("Show1");//获取方法mi.Invoke(o, null);//执行方法//4,根据属性信息来执行对应的方法Type t3 = ass.GetType("WindowsFormsApp2.IsPrint");//命名空间+类var attribute = Attribute.GetCustomAttribute(t3, typeof(BarcodeTagAttrib)) as BarcodeTagAttrib;if (attribute.BarcodeTpName == "IsPrint"){//var instance = Activator.CreateInstance(t2) as CtrlPlanITag;MethodInfo mi3 = t3.GetMethod("show2");//获取方法//instance.show2();//执行方法object o1 = Activator.CreateInstance(t3, null, null);//实例一个对象mi3.Invoke(o1, null);//执行方法}}public T ToPageInfo<T>(object model) where T : new(){T t = new T();PropertyInfo property = null;foreach (var item in typeof(T).GetProperties()){property = model.GetType().GetProperty(item.Name);if (property != null){item.SetValue(t, property.GetValue(model, null), null);}}return t;}public List<T> GetValue<T>(DataTable dt) where T : new(){List<T> list = new List<T>();Type type = typeof(T);for (int i = 0; i < dt.Rows.Count; i++){T t = new T();for (int j = 0; j < dt.Columns.Count; j++){PropertyInfo pro = type.GetProperty(dt.Columns[j].ColumnName);if (pro != null){if (dt.Rows[i][j] != DBNull.Value){pro.SetValue(t, dt.Rows[i][j], null);}}}list.Add(t);}return list;}public void Show1() {MessageBox.Show("Show1");}}public class PA{public int ID { get; set; }public string Name { get; set; }public string Description { get; set; }public string Remark { get; set; }}public class PB{public int ID { get; set; }public string Name { get; set; }public string DeviceType { get; set; }public string DeviceName { get; set; }public string Remark { get; set; }}public class BarcodeTagAttrib : Attribute{public string BarcodeTpName { get; set; }}public interface CtrlPlanITag{void show2();}[BarcodeTagAttrib(BarcodeTpName = "IsNeedEnd")]public class IsNeedEnd : CtrlPlanITag{public void show2(){MessageBox.Show("IsNeedEndShow");}}[BarcodeTagAttrib(BarcodeTpName = "IsPrint")]public class IsPrint : CtrlPlanITag{public void show2(){MessageBox.Show("IsPrintShow");}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/777650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring用到了哪些设计模式?

目录 Spring 框架中⽤到了哪些设计模式&#xff1f;工厂模式单例模式1.饿汉式&#xff0c;线程安全2.懒汉式&#xff0c;线程不安全3.懒汉式&#xff0c;线程安全4.双重检查锁&#xff08;DCL&#xff0c; 即 double-checked locking&#xff09;5.静态内部类6.枚举单例 代理模…

【论文阅读】UniLog: Automatic Logging via LLM and In-Context Learning

注 由于其公司的保密政策&#xff0c;本文没有公开源代码&#xff0c;数据是公开的。 文章目录 摘要一、介绍二、背景和动机2.1、日志语句生成2.2、大语言模型2.3、上下文学习&#xff08;In-Context Learning&#xff0c;ICL) 三、UNILOG3.1、模型骨干3.2、提示策略3.2.1、提…

3d金属模型灯怎么安装---模大狮模型网

在3D场景中&#xff0c;添加灯光是非常重要的步骤&#xff0c;可以提升场景的氛围和逼真度。特别是对于金属材质的模型&#xff0c;合适的灯光设置能够突出其质感和反射效果。下面将介绍如何在3D软件中安装金属模型灯&#xff0c;并分为以下四个分类进行详细说明。 一、选择合适…

竞赛 python+opencv+深度学习实现二维码识别

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; pythonopencv深度学习实现二维码识别 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 该项目较为新颖&…

【InternLM 实战营第二期笔记】书生·浦语大模型全链路开源体系及InternLM2技术报告笔记

大模型 大模型成为发展通用人工智能的重要途径 专用模型&#xff1a;针对特定任务&#xff0c;一个模型解决一个问题 通用大模型&#xff1a;一个模型应对多种任务、多种模态 书生浦语大模型开源历程 2023.6.7&#xff1a;InternLM千亿参数语言大模型发布 2023.7.6&#…

视觉信息处理与FPGA实现第八次作业——verilog实现对比度调节

一、查看灰度图的数据格式 2.1 安装HxD HxD下载链接&#xff1a;https://download.csdn.net/download/weixin_44357071/89045331 解压直接打开exe就能使用。 将需要查看二进制数据的图片拖到软件框里就能读取 2.2 找到bmp图像的图片点阵数据起始地址&#xff0c;原理和例子…

R语言批量计算t检验,输出pvalue和均值

1.输入数据如下&#xff1a; 2.代码如下 setwd("E:/R/Rscripts/rG4相关绘图") # 读取CSV文件 data <- read.csv("box-cds-ABD-不同类型rg4-2.csv", stringsAsFactors FALSE)# 筛选出Type2列为指定五种类型的数据 filtered_data <- subset(data, …

使用Kaggle API快速下载Kaggle数据集

前言 在使用Kaggle网站下载数据集时&#xff0c;直接在网页上点击下载可能会很慢&#xff0c;甚至会出现下载失败的情况。本文将介绍如何使用Kaggle API快速下载数据集。 具体步骤 安装Kaggle API包 在终端中输入以下命令来安装Kaggle API相关的包&#xff1a; pip install…

elementplus-vue-审核按钮-对话框(Dialog )

效果图&#xff1a; 代码&#xff1a; <template> <el-button type"success" click"dialogVisible true" :icon"Edit">审核</el-button> <el-dialog v-model"dialogVisible" title"是否通过" width&q…

公链角逐中突围,Solana 何以成为 Web3 世界的流量焦点?

在众多区块链公链中&#xff0c;Solana 凭借其创纪录的处理速度和极低的交易费用&#xff0c;成为了众多开发者和投资者的宠儿。就像网络上流行的那句话所说&#xff1a;“Why slow, when you can Solana?”&#xff0c;Solana 正以它的速度和强大的生态系统&#xff0c;重新定…

uniApp使用XR-Frame创建3D场景(5)材质贴图的运用

上一篇讲解了如何在uniApp中创建xr-frame子组件并创建简单的3D场景。 这篇我们讲解在xr-frame中如何给几何体赋予贴图材质。 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"><xr-node><xr-assets><xr-asse…

AcWing 800. 数组元素的目标和(哈希)

原题链接 哈希思路: 我们可以在输入 时把每个数存进哈希表里&#xff0c;对于每个输入的 b[i]看看 x−b[i]是否出现与哈希表即可。 图解 #include <iostream> #include <algorithm> #include <unordered_map> using namespace std;const int N 111111;in…

【网安小白成长之路】3.MySQL环境配置以及常用命令(增删改查)

&#x1f42e;博主syst1m 带你 acquire knowledge&#xff01; ✨博客首页——syst1m的博客&#x1f498; &#x1f51e; 《网安小白成长之路(我要变成大佬&#x1f60e;&#xff01;&#xff01;)》真实小白学习历程&#xff0c;手把手带你一起从入门到入狱&#x1f6ad; &…

RabbitMQ3.x之四_RabbitMQ角色说明及创建用户与授权

RabbitMQ3.x之四_角色说明及创建用户与授权 文章目录 RabbitMQ3.x之四_角色说明及创建用户与授权1. 访问和授权1. Tags说明2. 命令行示例 2. 管理界面新建用户及访问授权1. 管理界面新建用户2. 管理界面中的授权说明3. guest用户不能远程登录提示 3. 创建用户1. 基本命令2. 实际…

大型矿业集团安全知识竞赛主持词

男&#xff1a;尊敬的各位领导&#xff0c;员工同志们&#xff1a; 合&#xff1a;大家好&#xff01; 男&#xff1b;首先让我们以热烈的掌声对公司领导亲临比赛现场指导观看表示欢迎&#xff01; 男&#xff1b;继成功开展了荣辱观专题讲座、好矿嫂女红艺术展、安全谜语竞猜…

RabbitMQ 实验消费原始队列消息, 拒绝(reject)投递死信交换机过程

如果你想通过 RabbitMQ 的死信队列功能实现消费者拒绝消息投递到死信交换机的行为&#xff0c;你可以按照以下步骤操作&#xff1a; 创建原始队列&#xff0c;并将其绑定到一个交换机上&#xff1a; export RABBITMQ_SERVER127.0.0.1 export RABBITMQ_PORT5672 export RAB…

反序列化动态调用 [NPUCTF2020]ReadlezPHP1

在源代码上看到提示 访问一下看看 代码审计一下 <?php #error_reporting(0); class HelloPhp {public $a;public $b;public function __construct(){$this->a "Y-m-d h:i:s";$this->b "date";}public function __destruct(){$a $this->a;…

实验02-1 C#和ASP.NET控件:在Web窗体中输出九九乘法表

【实验内容及要求】 1. 在Web窗体中输出九九乘法表 浏览效果如图2-1所示。 图2-1 在Default.aspx.cs中编写C#代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls;public par…

目前常见的搜索引擎有哪些?

常见的搜索引擎可以分为两类&#xff1a;全网搜索类和平台内搜索。 全网搜索类是指可以在互联网范围内进行搜索的引擎&#xff0c;它们提供了广泛的搜索结果&#xff0c;包括网页、图片、视频、新闻等各种类型的内容。以下是一些常见的全网搜索引擎&#xff1a; 百度&#xff…

Mac安装wget流程及异常解决(亲测有效)

目录 1.终端输入wget检查自己是否已经安装过wget,没有安装如下图2. 安装brew1&#xff09;点击brew官网&#xff1a;[官网网址](https://brew.sh)2&#xff09;将命令粘贴到终端&#xff0c;回车执行3&#xff09;输入sudo密码4&#xff09;系统开始自动安装brew&#xff0c;等…