C#高级编程之“反射”

C# 高级--反射 详解 C#来自于System.Reflection,是一个帮助类库,可以读取dll/exe中metadata,使用metadata创建对象。获取方法MethodInfo,执行MethodInfo 的Invoke方法,传递方法所在的类的实例对象+参数。需要传递一个object类型的数组作为参数,参数按照从昨往右严格匹配,如果没有匹配的报异常。中间语言,编译把高级语言编译后得到的C#中最真实的语言状态,面向对象语言。需要通过方法参数类型类区别方法,传递参数,严格匹配参数类型。一种反射技术,可以动态创建dll/exe。 阅读详情

一,定义

   反射技术,能够让托管代码在运行时查看元数据以及代码的各方面信息。

 

二,常用方法

  1,获取对象方法(必须以Public修饰的方法,不包括构造函数);

  2,获取对象属性;

  3,获取对象的父类;

 

 

附示例代码:

using System;

using System.Collections.Generic;

using System.Text;

using System.Reflection;

 

/// <summary>

/// 基类

/// </summary>

public class Base

{

 

}

 

/// <summary>

/// 继承Base的子类

/// </summary>

public class Child : Base

{

    private int num = 1;

 

 

    public Child()

    {

 

    }

 

    public int Num

    {

        get

        {

            return num;

        }

        set

        {

            this.num = value;

        }

    }

 

    //在获取对象方法时,非Public修饰的方法是无法取得的,但包括构造函数

    private void testMethod1()

    {

 

    }

 

    public void testMethod2()

    {

       

    }

}

 

public class Program

{

 

    Child c = new Child();

 

    static void Main(string[] args)

    {

        Program p = new Program();

        System.Type cType = p.c.GetType();

 

        //获取对象方法

        MethodInfo[] methods = cType.GetMethods();

        Console.WriteLine("方法列表:");

        foreach (MethodInfo m in methods )

        {

            Console.WriteLine(m.Name );

        }

 

        //获取对象属性

        PropertyInfo[] propertys = cType.GetProperties();

        Console.WriteLine("属性列表:");

        foreach (PropertyInfo ps in propertys  )

        {

            Console.WriteLine(ps.Name );

        }

 

        //获取对象基类

        System.Type parent = cType.BaseType;

        Console.WriteLine("对象层次结构:");

        Console.Write(cType .FullName );

        while (parent !=null )

        {

            Console.Write("->" + parent .Name);

            parent = parent.BaseType;

        }

       

 

        Console.Read();

    }

}

 

运行结果:

方法列表:
get_Num
set_Num
testMethod2
GetType
ToString
Equals
GetHashCode
属性列表:
Num
对象层次结构:
Child->Base->Object 

C#反射 优点: 1. 提高程序的灵活性与可扩展性,耦合度; 缺点: 1. 过多使用,会造成逻辑模糊,因为反射已经绕过的源码,看不到逻辑实现,会造成后期维护上的困扰 2. 性能的问题,使用反射处在解释的操作,主要应用在对灵活性和拓展性要求很高的系统框架上,普通程序不建议使用 小结:.Net应用程序由几个部分:‘程序集(Assembly)’、‘模块(Module)’、‘类型(... 阅读详情

相关推荐

【C#】C#高级语法

【C#】C#高级语法 1、特性(Attribute): 用于添加元数据。在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。 预定义特性:AttributeUsage;Conditional;Obsolete 自定义特性:一个新的自定义特性应派生自System.Attribute类。 2、反射(Refl

活到老,学到老! 1万+

c# 高级技术--反射

反射? 难道是物理中光的反射??  NO、NO、NO !!! 这个“反射”和物理一点关系都没有!! 那什么是反射呢? 我个人的理解是:在程序中 动态的添加程序的功能(添加dll文件) 无需在源代码中添加 从而实现为程序的功能“升级”。 说的有些官方了 下面我举几个例子  我们都玩过游戏 就拿我以前玩的QQ飞车来说 游戏厂商会隔一段时间对游戏进行升级 比如说音乐、赛道等 由于QQ飞车的客户端

popping_dancer的专栏 1328

C# 高级编程:反射机制深度解析

反射机制是C#开发者手中的双刃剑,合理运用可以创建出灵活强大的系统架构,滥用则可能导致性能问题和维护灾难。在框架和基础库开发中优先考虑反射在业务逻辑层尽量使用强类型方案对性能关键路径采用表达式树或Emit优化持续关注.NET生态中的新特性(如AOT编译)通过本文的深度解析,开发者应能准确判断反射的使用场景,并能在需要时通过优化策略平衡灵活性与性能需求。反射作为.NET类型系统的镜像世界,掌握其精髓将极大提升开发者的元编程能力。

hy_4377的博客 876

C# 反射高阶语法

在上一篇博文中,我知道反射原理,是通过metadata元数据,拿到各种类型对象,这一篇博文重点列出,常见语法: 知识点: 第一:获取type对象,三种方式,即typeof运算符,静态GetType,程序Assembly对象的GetType方法 第二:获取Type对象各种其他Type对象,比如数组Type对象中子元素对象Type,GetElementType() 第三:获取Type类型中嵌套类型对象,比如类中定义的类,它是非递归,并且获取公开访问属性的嵌套类 第四:获取Type对象的全名称,即命名空

xu2034029667的博客 697

C#编程-使用反射检索元数据

术语反射通常用来指镜像。如果您站在镜子面前,镜子会反射出您的所有物理属性,如:您的身高、肤色和身体结构。在C#中也一样,反射被用于反射程序有关的所有信息。C#程序可以利用反射获得类在运行时的信息。反射在运行时获取类型信息的过程中被使用。提供运行时程序元数据信息的类在System.Reflection名称空间中。System.Refection名称空间包含的类允许程序员获取关于正在运行的应用程序信息以及将类型、值和对象动态添加到那个应用程序。

RZer的博客 1192

C#高级编程——Reflection反射

主目录:https://www.v2know.com/MainPage/Category/CSharp C#高级编程——Reflection反射 反射就像在主程式里面,安装了一个声纳探测器, 在生命周期一开始的时候,就会调用探测器,你的方法执行依赖于声纳反射回来的声波, 这样的做的好处是,当你想更新程序的时候,只需要加dll就行了, 不需要重新编译。 这样,就成了插件式的编程。 实例: usingSystem; [AttributeUsage(AttributeTarge...

Maple 533

C# 高级特性(二):反射(Reflection)

可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。 //反射(Reflection)有下列用途: //1它允许在运行时查看特性(attribute)信息。 public static void ShowAttribute() { System.Reflection.MemberInfo info = typeof(Attribut...

tiankong1213的博客 539

C# 反射与动态编程

CSharp 反射与动态编程知识点

片言可决讼,半纸能缚龙 1781

求解:《C#高级编程》第11章“反射”问题!谢谢大虾啦……

代码出自《C#高级编程》第11章“反射”,问题在文中红色注释部分。 //===========================WhatsNewAttribute.cs :using System;using System.Collections.Generic;using System.Text;namespace hillspring.WhatsNewAttributes{ 

hillspring 1065

.NET中的高级特性

.NET中的高级特性

无监督低照度增强实战:用ZeroDCE和SCI拯救你的夜间照片(附PyTorch代码)

本文深入探讨了无监督低照度图像增强技术,重点解析了ZeroDCE和SCI两大代表性模型的核心原理与实战应用。通过对比分析两者的技术路径、网络结构及性能特点,并附上详细的PyTorch代码实现,旨在帮助读者掌握无需配对数据即可有效提升夜间照片画质的深度学习解决方案。

git9versioner的博客 489

C#编程技术之文章目录

2008年08月01日SuspendLayout 和 ResumeLayout 方法 IsPostBack深入探讨 2010年01月26日“反射”在C#编程中的应用  

Chendy的专栏 2050

用VINS-Fusion跑通EuRoC数据集:Ubuntu22.04+ROS2环境下的保姆级评测指南

本文详细介绍了在Ubuntu22.04和ROS2 Humble环境下使用VINS-Fusion处理EuRoC数据集的完整流程。从环境配置、数据集转换到参数调优和性能评估,提供了一套全面的多传感器融合分析方案,帮助开发者在无人机精准定位场景中实现高效部署与优化。

weixin_29212867的博客 517

C#高级--反射详解

C#高级–反射详解 一、什么是反射/反编译 1、C#编译运行过程 高级语言->编译->dll/exe文件->CLR/JIT->机器码 2、原理解析 metadata:元数据数据清单,记录了dll中包含了哪些东西,是一个描述。 IL:中间语言,编译把高级语言编译后得到的C#中最真实的语言状态,面向对象语言。 反射:来自于System.Reflection,是一个帮助类库,可以读取dll/exe中metadata,使用metadata创建对象。 Emit:一种反射技术,可以动态创建dl

李宥的博客 3万+

使用KITTI数据集测试不同算法的性能

该文章将使用同一个kitti数据集来测试不同算法的性能,目前已经测试的算法包括:LIO-SAM,FAST-LIO2,Point-LIO,Faster-LIO。

wwtx的博客 2586

ROS入门教程(七)—— Gazebo与RViz联合仿真

通过Gazebo与RViz联合仿真实现机器人运动。

吾门的博客 1万+

c#之反射详解

C#之反射详解

鲤籽鲲的博客 2万+

基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机

目录基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机项目实例1. 项目背景2. 系统架构2.1 电励磁同步电动机模型2.2 三相逆变器模型2.3 自适应控制器(Adaptive Controller)2.4 系统框图3. 模型设计3.1 创建Simulink模型3.2 自适应控制(Adaptive Control)设计3.3 仿真环境搭建4. 参数优化4.1 自动调优5. 实际应用案例5.1 工业驱动系统5.2 风力发电系统6. 结论进一步优化建议需求分析电励磁同步电动机

MHD0815的博客 266

【深入浅出C#】章节 9: C#高级主题:反射和动态编程

反射(Reflection)是计算机科学中的一个概念,通常用于描述在运行时动态地获取、检查和操作程序的类型、成员、方法、属性和其他代码元素的能力。反射使得程序能够在运行时了解自身的结构和元数据信息,而不需要在编译时知道这些信息。反射允许你在运行时获取对象的类型信息,包括类的名称、命名空间、基类、实现的接口等。这对于动态加载和操作程序集中的类型非常有用。通过反射,你可以获取类的字段、属性、方法、事件等成员的信息,包括它们的名称、数据类型、访问修饰符和特性。这使得你可以在运行时动态地操作这些成员。

喵叔 1421

芒果YOLOv12改进13:独家原创改进最新 CFNet 核心结构|即插即用 | 首发改进显著提升检测性能,小目标检测涨点必备

芒果YOLOv12改进13:独家原创改进最新 CFNet 核心结构|即插即用 | 首发改进显著提升检测性能,小目标检测涨点必备

包括YOLOv5、YOLOv7、YOLOv8等模型改进 287

STM32CubeIDE开发环境搭建与GPIO控制实战

嵌入式开发中,MCU开发环境构建是软硬件协同的起点,其核心在于工具链选型、外设抽象层级与调试可靠性。HAL库作为ST官方标准硬件抽象层,通过统一接口屏蔽芯片差异,显著提升工程可移植性;而STM32CubeIDE则以图形化配置+自动生成代码的方式,实现‘配置即代码’的确定性开发范式。该组合在教学验证、原型迭代和中小规模量产中具备高性价比技术价值,广泛应用于智能传感、工业HMI及IoT终端等场景。本文聚焦STM32CubeIDE 1.15.0环境部署、MyST账户与固件包管理、ST-LINK驱动校验,以及基于H

weixin_33531560的博客 81

C#反射与泛型:8个高级技巧,让你的代码飞起来

反射是.NET框架提供的一个强大机制,允许程序在运行时检查和操作对象的类型信息。通过反射,我们可以动态地创建对象、调用方法、访问字段和属性等。通过本文的详细讲解和代码示例,相信你已经掌握了C#中反射和泛型的高级技巧。这些技巧不仅可以让你的代码更加灵活和高效,还能帮助你解决实际开发中遇到的各种问题。希望这篇教程对你有所帮助,期待你在C#编程中取得更大的成就!🌟✨如果你有任何问题或建议,欢迎在评论区留言交流!希望这篇教程对你有所帮助,期待你在C#编程中取得更大的成就!😊✨😊✨。

java专栏 1814

Vibe Coding 实战指南:用 3 类社区资源实现每周高效追新

介绍一种分层技术雷达校准方法,通过领域过滤器(L1技术栈锚定、L2能力映射、L3场景收敛)精准筛选AI编程相关更新,结合可验证的Shell命令与CI任务卡,将信息过载压缩为可执行、可审计的工程实践。

weixin_27251469的博客 330

C#中的反射

一:什么是反射 通俗来讲,反射就是我们在只知道一个对象的外部而不了解内部结构的情况下,通过反射可以使我们明确这个对象的内部实现 反射是.Net中获取运行时类型信息的一种方式,.Net应用程序由几个部分组成:程序集(Assembly)、模块(Module)、类型(Class)。而反射提供一种编程的方式,可以在程序运行期获得这几个组成部分的相关信息 二:反射的作用 利用反射可以在不需要使用new关键词的情况下,就可以动态创建对象,使用对象 三:反射是如何实现的 反射的内部实现依赖于元数据 元数据简单来

L的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C#反射详解

目录 反射定义反射(C# 编程指南) 使用场景 形象说明 反射的用途 反射用到的主要类 System.Type类用法 实例应用 System.Reflection.Assembly类的用法 反射定义反射(C# 编程指南)   反射提供了封装程序集、模块和类型的对象(Type类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了特性,可以利用反射对它们进行访问。 使用场景 需要访问程序元数据的特性。 检查..

潘达小新 5776

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: C#中Ref和Out传参的区别
下一篇: C#高级编程之“代码属性”
Anckly
博客等级 码龄20年 6粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值