zoukankan      html  css  js  c++  java
  • C#基础|初探反射

     

    什么是反射
    我们编写的C#代码都可以编译成exe文件或dll文件。暂时先把他们叫做程序集吧,程序集中包含了很多信息。你写了一个类,类中会有字段,有属性,有方法,编译是会把这些信息保存在程序集中,暂时把这些信息叫做程序类型信息吧。可以肯定的是程序集中包含了程序类型信息。
    程序类型信息有一个更加专业的术语叫“元数据”(metadata),他们就保存在程序集中。
    顺着前面的前景提要,来给反射下一个定义吧。
    一个程序在运行时,查看其他程序集或本身的元数据的行为叫做反射
     
    反射实战,创建Type类对象
    前面说到程序集中包含一个叫元素据的东西,正所谓在面向对象的世界里,万物皆对象,有对象肯定有类型,在C#中有预定义类型(int long string 等)还有程序员自定义类型,比如student类。好奇的你肯定会问那和元数据相关的类叫什么呢?答曰:是一个叫做Type的抽象类,他被设计用来包含类型的各种信息,有那些方法、那些属性、那些特性等各种信息。
    细心的你肯定会注意到Type类是抽象的,不能够直接new一个,那怎么创建呢?
    可以使用GetType方法和typeof运算符来创建Type对象
    解决了创建问题,再来看看Type的属性和方法吧(常见的)
    属性:
    Name 返回类型的名字
    NameSpace 返回包含类型的声明和命名空间
    Assembly 返回声明类型的程序集
    方法:
    GetFields 返回字段列表
    GetProperties 返回属性列表
    GetMethods 返回类型的方法列表
     
    看下面的代码了。
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 using System.Reflection; //使用反射必须导入这个命名空间
     7 namespace cShap基础学习
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             Student stu = new Student();
    14             Type t1 = stu.GetType();  //通过GetType方法创建;
    15             Type t2 = typeof(Student);  //通过typeof操作符创建
    16             //我们来看看Type获取到了什么东西吧
    17             Console.WriteLine("Student类型的name是:{0}", t1.Name);
    18             Console.WriteLine("Student类型命名空间是:{0}", t1.Namespace);
    19 
    20             //获得Student的方法列表
    21             foreach(var m in  t1.GetMethods() )
    22             {
    23                 Console.WriteLine("方法的名字->{0},返回值->{1}", m.Name, m.ReturnType);
    24             }
    25 
    26 
    27         }
    28     }
    29 
    30     class Student
    31     {
    32         public void SayHello()
    33         {
    34             Console.WriteLine("Hello~~");
    35         }
    36 
    37         public void SayHi()
    38         {
    39             Console.WriteLine("Hi``");
    40         }
    41         public String name;
    42         private String pwd;
    43     }
    44 }
     
    运行结果
     
    关于Type类在MSDN的资料:http://msdn.microsoft.com/zh-cn/library/system.type.aspx
     
    《完》
  • 相关阅读:
    javascript 调试代码
    简洁的js拖拽代码
    搭个小窝
    FastDFS随笔
    JDK6和JDK7中String的substring()方法及其差异
    杂笔
    JVM内存随笔
    java中的final和volatile详解
    关于java的Synchronized,你可能需要知道这些(下)
    关于java的Synchronized,你可能需要知道这些(上)
  • 原文地址:https://www.cnblogs.com/icez/p/reflection_say_hello_world.html
Copyright © 2011-2022 走看看