C#C#基础知识回顾– 反射(1)

   反射(reflection)举凡平栽允许用户得到类型新闻的C#特点。术语“反射”源自于其的行事章程:

Type对象映射它所代表的根对象。对Type对象举行查询好博得(反射)与类型相关的音信。反射是一样栽

效能强大的编制,它同意学习及运就以运作时才可以明了的色成效。

  那么些是官方概念,其实说白了,反射就是可以通晓大家不解类型的类型音讯这么一个东西.没什么秘密而提!

照的骨干是System.Type。System.Type包含了许多特性与艺术,使用这多少个性和艺术好以运作时取类型消息。

一旦得到类型新闻,就足以调用其构造函数、方法以及性能。由此,反射允许用编译时不可用的替代

堆。因为反射涉及内容极其多,大家最重要学习常用的反光技术。

同一、获取模式的连锁信息

  一旦爆发矣Type对象,就得应用GetMethods()方法来抱此类型帮忙的法的列表。它的等同种植样式吗:

  MethodInfo[] GetMethods()

  MethodInfo对象描述了主调类型所支撑之不二法门,因而可以因此它的Name属性得到模式的称号。同时它还有一定量独再

而的点子,ReturnType和GetParameters()。

  只念属性ReturnType为一个Type类型的对象,它吧用户提供方的回到类型消息。

  GetParameters()重返一个道的参数列表,它的骨干形式吗:

  ParameterInfo[] GetParameters()

  参数音信保存在ParameterInfo对象中。ParameterInfo类定义了汪洋叙述参数消息的性质和方法。

里头常用属性是Name和ParameterType,这一点儿单特性我就非介绍了,从字面上应有可以理解了。

哼了,不说了,讲了如此多概念想必我们都不耐烦了。下边大家先看代码示例,估摸您看了随后,再结方面的

概念讲解,你早晚会说:哦,原来如此!!!

  

class MyClass
    {
        int x;
        int y;

        public MyClass(int i, int j)
        {
            x = i;
            y = j;
        }

        public int Sum()
        {
            return x + y;
        }

        public bool IsBetween(int i)
        {
            if (x < i && i < y)
                return true;
            else
                return false;
        }

        public void Set(int a, int b)
        {
            x = a;
            y = b;
        }

        public void Set(double a, double b)
        {
            x = (int)a;
            y = (int)b;
        }

        public void Show()
        {
            Console.WriteLine("x:{0},y:{1}", x, y);
        }
    }

运行结果:

C# 1

  请留意,除了MyClass定义之方外,object定义的方吧会受出示。这是盖C#拥有的类都继承给object。

其余,类型名称(如Int32)选取的凡.net结构的名号。

第二、GetMethods()的另外一种模式

  这种情势中可指定各种标记,以此筛选发生想只要取得之法门,它的要旨形式:

  MethodInfo[]
GetMethods(BindingFlags flags)

这种样式就抱同所指定的法相匹配的计,BindingFlages
是一个枚举,相关知识要参考:

msdn上BindingFlags
枚举

  可以用OR运算符把简单单或另行多的标志连接于共同。实际上,括号被最少应包含Instance(或Static)

以及Public(或NotPublic)标记,否则将非会合拿到任何格局。

  GetMethods()方法的BindingFlages格局的一个紧要用途在于,它可独自获有类自身定义的道要休

获它们打基类继承的艺术,那对object尤其有由此。

诸如用下列模式来替换前边程序中之GetMethods()语句:

MethodInfo[] mi = t.GetMethods(BindingFlags.DeclaredOnly |
BindingFlags.Instance |
BindingFlags.Public);

开展上述变动后,程序的出口结果吗:

C# 2

可以看出,这里只呈现了MyClass彰显定义之方。

未完待续……

PS:由于工作缘故,本打算前几日之革新可能使延迟至周一实在对不起……

 

相关文章