C#入门(12):反射介绍

C# 反射(Reflection)是一个强大的机制,允许在运行时检查程序集、模块和类型的元数据,以及动态创建和操作类型的实例。通过反射,你可以在运行时获取和设置对象的属性、调用方法、创建新对象,甚至可以加载新的程序集。

反射的主要特点和用途

  1. 检查对象类型:能够检查任何对象的类型。
  2. 动态创建实例:可以动态创建类的实例。
  3. 获取和设置属性和字段:能够在运行时获取或修改属性和字段的值。
  4. 动态调用方法:可以动态调用对象的方法。
  5. 程序集和模块操作:可以加载和分析程序集和模块。
  6. 自定义特性处理:反射允许读取自定义特性。

反射的使用示例

1. 获取类型信息
using System;public class MyClass
{public int MyProperty { get; set; }public void MyMethod() { }
}public class Program
{public static void Main(){Type myType = typeof(MyClass);Console.WriteLine("Properties:");foreach (var prop in myType.GetProperties()){Console.WriteLine(prop.Name);}Console.WriteLine("Methods:");foreach (var method in myType.GetMethods()){Console.WriteLine(method.Name);}}
}
2. 动态创建实例
using System;public class MyClass
{public MyClass(){Console.WriteLine("MyClass instance created");}
}public class Program
{public static void Main(){Type myType = typeof(MyClass);MyClass myClassInstance = (MyClass)Activator.CreateInstance(myType);}
}
3. 获取和设置属性值
using System;
using System.Reflection;public class MyClass
{public string Name { get; set; }
}public class Program
{public static void Main(){MyClass myClass = new MyClass();PropertyInfo propInfo = myClass.GetType().GetProperty("Name");// 设置属性值propInfo.SetValue(myClass, "Test Name");// 获取属性值string value = (string)propInfo.GetValue(myClass);Console.WriteLine("Name: " + value);}
}
4. 动态调用方法
using System;
using System.Reflection;public class MyClass
{public void MyMethod(string message){Console.WriteLine("Message: " + message);}
}public class Program
{public static void Main(){MyClass myClass = new MyClass();MethodInfo methodInfo = myClass.GetType().GetMethod("MyMethod");// 动态调用方法methodInfo.Invoke(myClass, new object[] { "Hello Reflection" });}
}

这些示例展示了反射的基本使用方法,包括获取类型信息、创建类实例、操作属性和字段,以及动态调用方法。反射是一个功能强大但相对高开销的特性,因此在性能敏感的应用中应谨慎使用。

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

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

相关文章

基于ResNet框架的CNN

数据准备 DATA_URL http://download.tensorflow.org/example_images/flower_photos.tgz 一、训练集和验证集的划分 #spile_data.pyimport os from shutil import copy import randomdef mkfile(file):if not os.path.exists(file):os.makedirs(file)file flower_data/flower…

PHP笔记-->读取JSON数据以及获取读取到的JSON里边的数据

由于我以前是写C#的,现在学一下PHP, 在读取json数据的时候被以前的思维卡住了。 以前用C#读取的时候,是先定义一个数组,将反序列化的json存到数组里面,在从数组里面获取jaon中的“data”数据。 其实PHP的思路也是一样…

ASP.NET 开发几个知识点

1、 皮肤设定&#xff1a; 项目右键&#xff0c;建立皮肤 app_themes 文件夹&#xff0c;右键 建立 web from 皮肤文件&#xff0c; 设定皮肤样式。全局使用皮肤 web.config 增加 <pages styleSheetTheme"Skin1" /> &#xff0c;或在 具体页面 头 增加 sty…

算法leetcode|89. 格雷编码(rust重拳出击)

文章目录 89. 格雷编码&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 89. 格雷编码&#xff1a; n 位格雷码序列 是一个由 2n 个整数组…

11.20 知识总结(choices参数、MVC和MTV的模式、Django与Ajax技术)

一、 choices参数的使用 1.1 作用 针对某个可以列举完全的可能性字段&#xff0c;我们应该如何存储 .只要某个字段的可能性是可以列举完全的&#xff0c;那么一般情况下都会采用choices参数 1.2 应用场景 应用场景&#xff1a; 学历&#xff1a; 小学 初中 高中 本科 硕士…

第八部分:JSP

目录 JSP概述 8.1&#xff1a;什么是JSP&#xff0c;它有什么作用&#xff1f; 8.2&#xff1a;JSP的本质是什么&#xff1f; 8.3&#xff1a;JSP的三种语法 8.3.1&#xff1a;jsp头部的page指令 8.3.2&#xff1a;jsp中的常用脚本 ①声明脚本&#xff08;极少使用&#xf…

打不开github网页解决方法

问题&#xff1a; 1、composer更新包总是失败 2、github打不开&#xff0c;访问不了 解决方法&#xff1a;下载一个Watt Toolkit工具&#xff0c;勾选上&#xff0c;一键加速就可以打开了。 下载步骤&#xff1a; 1、打开网址&#xff1a; Watt Toolkit 2、点击【下载wind…

k8s的高可用集群搭建,详细过程实战版

kubernetes高可用集群的搭建 前面介绍过了k8s单master节点的安装部署 今天介绍一下k8s高可用集群搭建 环境准备&#xff1a; vip &#xff1a;192.168.121.99 keeplive master01&#xff1a;192.168.121.153 centos7 master02&#xff1a;192.168.121.154 centos7 master03&a…

jupyter修改默认打开目录

当我们打开jupyter notebook&#xff08;不管用什么样的方式打开&#xff0c;使用菜单打开或者是命令行打开是一样的&#xff09;会在默认的浏览器中看到这样的界面、 但是每一台不同的电脑打开之后的界面是不同的&#xff0c;仔细观察就会发现&#xff0c;这里面现实的一些文件…

基于Vue+SpringBoot的超市账单管理系统 开源项目

项目编号&#xff1a; S 032 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S032&#xff0c;文末获取源码。} 项目编号&#xff1a;S032&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3…

【自动化测试】基于Selenium + Python的web自动化框架!

一、什么是Selenium&#xff1f; Selenium是一个基于浏览器的自动化工具&#xff0c;她提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分&#xff1a;Selenium IDE、Selenium WebDriver 和Selenium Grid&#xff1a;  1、Selenium IDE&…

11.17 知识总结(事务、常见的字段类型等)

一、 事务 1.1 如何开启事务 前言 事务是MySQL数据库中得一个重要概念 事务的目的&#xff1a;为了保证多个SQL语句执行成功&#xff0c;执行失败&#xff0c;前后保持一致&#xff0c;保证数据安全 ACID属性&#xff1a; A&#xff1a; C&#xff1a; I&#xff1a; D&#x…

10_6 input输入子系统,流程解析

简单分层 应用层 内核层 --------------------------- input handler 数据处理层 driver/input/evdev.c1.和用户空间交互,实现fops2.不知道数据怎么得到的,但是可以把数据上传给用户--------------------------- input core层1.维护上面和下面的两个链表2.为上下两层提供接口--…

window拖拽操作的实现

调用DragAcceptFiles&#xff0c;让控件或者窗体支持文件拖动操作 void DragAcceptFiles(HWND hWnd, //指明目标窗体的句柄BOOL fAccept //为True时 则hWnd所指向的窗体可以接受拖放的文件. );窗口消息过程处理WM_DROPFILES消息。 在WM_DROPFILES消息处理过程中&…

【面试经典150 | 数学】回文数

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;反转一半数字 其他语言python3 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本…

StoneDB顺利通过中科院软件所 2023 开源之夏 结项审核

近日&#xff0c;中科院软件所-开源软件供应链点亮计划-开源之夏2023的结项名单正式出炉&#xff0c;经过三个月的项目开发和一个多月的严格审核&#xff0c;共产生 418个成功结项项目&#xff01;其中&#xff0c;StoneDB 作为本次参与开源社区&#xff0c;社区入选的两个项目…

EXPLAIN命令使用及功能介绍

当你不确定某个select语句执行会不会影响数据库cpu怎么办&#xff1f;&#xff0c;使用EXPLAIN命令&#xff0c;给你分析该不该执行&#xff01;&#xff01; EXPLAIN命令介绍 MySQL的EXPLAIN命令是一个查询优化工具&#xff0c;用于分析和评估SELECT语句的执行计划。它提供了…

制作含有音频、视频的网页

参考代码如下 <!DOCTYPE html> <html> <head><title>视频音乐网页</title> </head> <body><!-- 视频 --><video width"320" height"240" controls><source src"movie.mp4" type"…

python——第十一天

今日目标&#xff1a; 模块和包的基本概念 python中模块的导入问题 main函数的作用和使用 常见内置模块的使用 IO流相关 模块和包的基本概念&#xff1a; 模块&#xff08;module&#xff09;&#xff1a;一个.py文件就是一个模块 包&#xff08;package&#xff09;&#xff1…

单片非晶磁性测量系统磁参量指标

1. 概述 单片非晶磁性测量系统是专用于测量非晶或纳米晶薄片(带)交流磁特性的装置&#xff0c;由精密励磁及测量装置 ( 40 Hz&#xff5e;65 Hz&#xff0c;可定制至400 Hz )、单片磁导计、全自动测量软件组成。使用该装置可在能耗、效率、材料均匀性/一致性、可靠性、整个生命…