c#结构体内声明数组 C#反射机制

 2024-01-20 00:02:45  阅读 0

什么是反射?

首先,我们通过两个例子来说明反射的一般概念。

B超检查:每个人在体检时可能都做过B超检查。 B超可以通过腹部检测你的内脏器官的生理状况。 这是怎么做到的? B超检查是B型超声检查的一种。 它可以通过腹部向您的体内发射B型超声波。 当超声波撞击到内脏壁时,会产生一定的“回声”反射,然后可以对“回声”进行处理,显示内脏器官的状况。

地球内部结构:地球内部结构大致可分为三层:地壳、地幔和地核。 不深入地球表面,如何才能知道地球的内部结构呢? 我们可以向地球发送“地震波”。 “地震波”有两种,一种是“横波”,一种是“纵波”。 “横波”只能穿透固体,而“纵波”既可以穿透固体又可以穿透液体。 通过面对地面上的纵波和横波的反射,我们可以大致确定地球的内部结构。

大家注意到,这两个例子的共同特点就是从外部了解物体的内部结构,并且都利用了波的反射功能。 .NET中的反射还可以实现从对象外部了解对象(或程序集)内部结构的功能,即使你不知道该对象(或程序集)是什么。 另外.NET中的反射还可以操作有状态地创建对象并执行其方法。

反射是.NET 中的一个重要机制。 通过反射,可以在运行时获取程序或程序集中各个类型(包括类、结构体、委托、接口、枚举等)的成员和成员信息。 通过反思,你可以知道每一种类型。 此外,我可以直接创建对象,即使对象的类型在编译时未知。

为什么使用反射而不是直接引用它的dll或类型?

例如,您有main.exe并且需要使用say.dll和draw.dll。 突然客户说我们要加一个运行功能。 那么我们只需要按照我们约定的规则制作一个run dll就可以了。 前面的main.exe不需要做任何修改(即不需要导入run.dll,这需要其他设计来规范),run.dll可以直接在main.exe中使用。

事实上,我们已经在不知不觉中使用它了。 举个最简单的例子,当你拖拽一个控件到VS的设计器中时,设计器会通过反射获取该控件的属性,并为你提供设置。 那么,问题来了,为什么要用反射呢? 因为设计者在做的时候,不可能预测你以后会拖进去什么控件。

反射的用途简单介绍

反射的用途大致总结如下,下面我们将详细介绍。

(1) 使用定义并加载程序集,加载程序集清单中列出的模块,并从此程序集中查找类型并创建该类型的实例。

(2)通过了解包含模块的程序集以及模块中的类,还可以获取模块上定义的所有全局方法或其他特定的非全局方法。

(3)用来了解构造函数的名称、参数、访问修饰符(如pulic or)和实现细节(如or)等。

(4)用来理解方法名、返回类型、参数、访问修饰符(如pulic or)和实现细节(如or)等。

(5) 用于了解字段的名称、访问修饰符(如 或 )和实现细节(如 )等,并获取或设置字段值。

(6) 通过了解事件名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等来添加或删除事件处理程序。

(7) 使用属性的名称、数据类型、声明类型、反射类型以及只读或可写状态来获取或设置属性值。

(8)用于了解参数名称、数据类型、是输入参数还是输出参数以及参数在方法签名中的位置等。

用于反射的主要类:

.Type 类——此类提供对有关任何给定数据类型的信息的访问。

..Class——它可用于访问有关给定程序集的信息,或将此程序集加载到程序中。

.Type 类:.Type 类在反射中起着核心作用。 但它是一个抽象基类。 Type 具有与每种数据类型相对应的派生类。 我们使用该派生类的对象的方法、字段和属性来查找有关该类型的所有信息。 获取给定类型的 Type 引用有以下三种常用方法:

数组的声明语句_c#结构体内声明数组_数组声明中包括哪些部分

数组的声明语句_c#结构体内声明数组_数组声明中包括哪些部分

Type 类的属性:

名称 数据类型名称

数据类型的完全限定名称(包括命名空间名称)

定义数据类型的命名空间名称

指示该类型是否为抽象类型

指示类型是否为数组

指示该类型是否是类

指示类型是否为枚举

指示类型是否是接口

指示类型是否是公共的

指示该类型是否是密封类

指示该类型是否为值类型

类型类方法:

(), ():返回

类型,用于获取类的构造函数信息

()、():返回类型,用于获取该类型的事件信息

()、():返回类型,用于获取类的字段(成员变量)信息

()、():返回类型,用于获取该类实现的接口信息

()、():返回类型,用于获取类所有成员的信息

()、():返回类型,用于获取该类的方法信息

()、():返回类型,通过调用Type的()方法,或者调用其他类的()方法,可以通过调用这些成员来获取该类的属性信息。

反射的具体用途

(1)我们首先定义一个类来测试反射

数组的声明语句_c#结构体内声明数组_数组声明中包括哪些部分

这堂课是一堂普通课。 我们将用它来测试反射的各种常见操作。

(2)查看类中的构造方法

我们可以根据对象查看内部的构造函数和参数。

c#结构体内声明数组_数组声明中包括哪些部分_数组的声明语句

(3)使用构造函数动态生成对象

我们使用构造函数来动态创建一个新对象,如下代码所示:

数组声明中包括哪些部分_数组的声明语句_c#结构体内声明数组

(4) 使用生成的对象

上面代码中,第一个参数是需要创建的对象类型,后面的参数是调用构造函数的参数。 以上三种格式都是可以接受的,只是调用的构造函数不同。

(5)查看类中的属性

数组的声明语句_数组声明中包括哪些部分_c#结构体内声明数组

(6)查看类中的方法

数组的声明语句_数组声明中包括哪些部分_c#结构体内声明数组

(7)查看类中的字段

数组的声明语句_数组声明中包括哪些部分_c#结构体内声明数组

(8)使用反射生成对象并调用属性、方法和字段进行操作

c#结构体内声明数组_数组声明中包括哪些部分_数组的声明语句

数组声明中包括哪些部分_c#结构体内声明数组_数组的声明语句

(9)..简介

类可以获取程序集信息并动态加载程序集。

并在程序集中找到类型信息并创建该类型的实例。 使用类可以减少程序集之间的耦合,有助于合理化软件结构。通过程序集名称返回对象

屁股 = .Load("");

通过DLL文件名返回对象

屁股=

.(".dll");

获取程序集中的类

输入 t = ass.(".");

//参数必须是类的全名

通过获取程序集中的所有类

类型[] t = ass.();

数组声明中包括哪些部分_数组的声明语句_c#结构体内声明数组

(10)..使用

数组声明中包括哪些部分_c#结构体内声明数组_数组的声明语句

(11)在当前项目中反映类

数组的声明语句_数组声明中包括哪些部分_c#结构体内声明数组

c#结构体内声明数组_数组声明中包括哪些部分_数组的声明语句

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码