首先,我们需要知道type,type是类型的类型(笑

官方点的说法是,BCL声明了一个Type抽象类,它被设计用来包含类型的特性,

使用这个类的对象(抽象类的对象?这显然是错误的,但是这里用的其实是Type的派生类的对象)能让我们获得程序使用的类型的信息,

对于程序用到的每一个类型,CLR都会创建一个包含这个类信息的Type类(其实是Type类的派生类)的对象。

就是你用到的每一个类,都有一个记录类信息的元数据(metadata),是Type类(Type抽象类的一个具体类RuntimeType类)的实例,typeof(你想洞察的类)就是得到 你想洞察的类的元数据。

得到type有两种方式

方式1:



方式2:无需实例对象a直接写

var type1 = typeof(A);

两种方式的得到的type1和type2这两个引用是一样的,因为都是对A这个类获得其type

我们能通过type1得到什么呢?

(这只是显示的一部分,还有很多东西没有显示出来)

返回成员:

GetMember():GetMember是单数,单数就是你要指定一个名字,才能返回

GetMembers():GetMembers是复数,用于取得该类的所有成员的信息

返回方法:

GetMethod():GetMethod是单数,单数就是你要指定一个名字,才能返回

GetMethods():GetMethods是复数,用于取得该类的所有方法的信息

下面的同理...

返回内嵌类型:

返回属性:

等等...

你拿到这些东西(属性,方法)后还可以调用它!

调用属性举例:

注意这里var的类型是PropertyInfo,里面一定包含了大量的东西!



10.png)

我们可以直接用Property.的方式,调用get方法和set方法了。



SetValue([我希望对a操作,a是A类的实例],[赋值的string是aaa],[忽略第三个参数给null即可] );

以上关键代码翻译:

            var type1 = typeof(A);
//创建一个Type类的type1“引用”到A类的元数据(也就是type实例,创建A类时就存在了),
var Property = type1.GetProperty("MyProperty");
//通过type1“引用”到A类的元数据(type对象)并且拿到A类中一个叫MyProperty的属性,用Property 来“引用”MyProperty的属性
var a = new A();
//创建一个A类型的实例a
Property.SetValue(a, "aaa", null);
//通过Property“引用到”MyProperty属性,并给a这个实例的MyProperty属性,赋值"aaa"。

这其实相当于绕了一个圈完成了

var a = new A();
a.MyProperty = "aaa";

而且通过反射还可以重写a.MyProperty的值。(原a.MyProperty = "bbb",通过反射改为"aaa")

调用方法举例:

与属性的类似



这里出现了Invoke方法,这个方法类似与属性部分的SetValue();是给方法Function()赋值用的。

Invoke(object obj, object[] paramenters) ;

第一个位置是obj也就是我们要传入的A类型实例a,

第二个位置很奇怪,是个object[],怎么传输呢?

这样写:

            function.Invoke(a, new object[] {1});

new一个object加[]然后在{}里写入对应类型的值即可。

C#反射从入门到放弃(这部分遇到的新东西太多了让人接受不能)的更多相关文章

  1. Struts2入门到放弃

    写在前面------------------------------------------------------------------------- 本文章主要从三个方面来学习Struts2框架 ...

  2. dotnet 从入门到放弃的 500 篇文章合集

    本文是记录我从入门到放弃写的博客 博客包括 C#.WPF.UWP.dotnet core .git 和 VisualStudio 和一些算法,所有博客使用 docx 保存 下载:dotnet 从入门到 ...

  3. Go从入门到放弃

    Go语言介绍 为什么你应该学习Go语言? 开发环境准备 从零开始搭建Go语言开发环境 VS Code配置Go语言开发环境 Go语言基础 Go语言基础之变量和常量 Go语言基础之基本数据类型 Go语言基 ...

  4. 2018-8-10-dotnet-从入门到放弃的-500-篇文章合集

    title author date CreateTime categories dotnet 从入门到放弃的 500 篇文章合集 lindexi 2018-08-10 19:16:52 +0800 2 ...

  5. CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维

    前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...

  6. [精品书单] C#/.NET 学习之路——从入门到放弃

    C#/.NET 学习之路--从入门到放弃 此系列只包含 C#/CLR 学习,不包含应用框架(ASP.NET , WPF , WCF 等)及架构设计学习书籍和资料. C# 入门 <C# 本质论&g ...

  7. OpenStack从入门到放弃

    OpenStack从入门到放弃 目录: 为何选择云计算/云计算之前遇到的问题 什么是云计算 云服务模式 云应用形式 传统应用与云感知应用 openstack及其相关组件介绍 flat/vlan/gre ...

  8. 绕过校园网的共享限制 win10搭建VPN服务器实现--从入门到放弃

    一.开篇立论= =.. 上次说到博主在电脑上搭建了代理服务器来绕过天翼客户端的共享限制,然而经过实际测试还不够完美,所以本着生命不息,折腾不止的精神,我又开始研究搭建vpn服务器= =... (上次的 ...

  9. 《区块链:从入门到放弃》之obc安装步骤

    obc安装步骤 朋友们可能会好奇,厨师不研究菜谱怎么改研究兵法了,哈哈,我原本是app出身,最近被安排去预研区块链和比特币技术,2个月下来,颇有斩获.期间得到IBM的CC同学指导我一步一步安装obc的 ...

随机推荐

  1. Nginx基础优化

    Nginx基础优化 1.隐藏nginx header版本号 1.1查看版本号 [root@Nginx ~]# curl -I http://www.yunwei.cn HTTP/1.1 200 OK ...

  2. secureCRT 如何上传下载文件

    首先连接相应服务器,然后在文件选项当中,打开SFTP功能,这个时候会生成一个新的标签栏. 下载: cd 到要下载文件的路径下 lcd 要存放文件的本地路径 get  {filename} 例: cd  ...

  3. oracle number 类型 只显示10位精度

    ,) show numwidth; 设置为15位 ; xa ------------------ 123456789012.12 或者 TO_CHAR(xa,'FM099999999999.09999 ...

  4. ubtuntu下虚拟环境搭建【python】

    为什么要搭建虚拟环境? 在开发过程中, 当需要使用python的某些工具包/框架时需要联网安装 比如联网安装Flask框架flask-0.10.1版本 sudo pip install flask== ...

  5. 基于React Native的跨三端应用架构实践

    作者|陈子涵 编辑|覃云 “一次编写, 到处运行”(Write once, run anywhere ) 是很多前端团队孜孜以求的目标.实现这个目标,不但能以最快的速度,将应用推广到各个渠道,而且还能 ...

  6. SqlServer 将表里面的值赋给变量

    @@c_beiz varchar(500) select top 1 @c_beiz = c_beiz from g_billd_qh_tmp where u_id=''+@uid+'' and io ...

  7. 小程序之rpx适配方案

    官网文档: 我的理解: rpx是自适应单位 计算方式: 1rpx = 设备屏幕宽度 / 750 注意:750是官网规定 为什么选择iPhone6为标准,作为开发模拟? 因为在iPhone6中,1px ...

  8. Vue学习笔记【3】——Vue指令之v-bind的三种用法

    直接使用指令v-bind 使用简化指令: 在绑定的时候,拼接绑定内容::title="btnTitle + ', 这是追加的内容'" <!DOCTYPE html> & ...

  9. linux IPC socket

    套接字是通讯端点的抽象 创建一个套接字 #include <sys/types.h> #include <sys/socket.h> int socket(int domain ...

  10. Python每日一题 001

    Github地址:https://github.com/Yixiaohan/show-me-the-code Talk is Cheap, show me the code. --Linus Torv ...