编程语言
首页 > 编程语言> > C#反射从入门到放弃(这部分遇到的新东西太多了让人接受不能)

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

作者:互联网

首先,我们需要知道type,type是类型的类型(笑
官方点的说法是,BCL声明了一个Type抽象类,它被设计用来包含类型的特性,使用这个类的对象(抽象类的对象?这显然是错误的,但是这里用的其实是Type的派生类的对象)能让我们获得程序使用的类型的信息。
得到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类的特性,

            var Property = type1.GetProperty("MyProperty");

在type1上拿到A类中一个叫MyProperty的属性

            var a = new A();

创建一个A类型的实例a

            Property.SetValue(a, "aaa", null);

给a这个实例的MyProperty属性,赋值"aaa"

标签:反射,入门,C#,type1,单数,类型,实例,var,type
来源: https://www.cnblogs.com/maomaodesu/p/11647514.html