C#中typeof 与GetType()的区别和methodinfo、memberinfo反射

    
    C#中任何对象都具有GetType()方法,它的作用和typeof()相同,返回Type类型的当前对象的类型。typeof(x)中的x,必须是具体的类名、类型名称等,不可以是变量名称;GetType()是基类System.Object的方法,因此只有建立一个实例之后才能够被调用。 
    其实我也不会c#。。。我个人的理解就是GetType可以对实例化后的对象进行操作,而typeof则是对类本身进行操作。typeof是运算符,获得某一类型的System.Type对象;GetType是方法,获取当前实例的类型.

一、typeof 与GetType()的区别

1.Typeof是运算符而是方法

2.GetType()是基类System.Object的方法,因此只有建立一个实例之后才能够被调用(初始化以后)

3.Typeof的参数只能是int,string,String,自定义类型,且不能是实例

4.GetType()和typeof都返回System.Type的引用.

5.TypeOf():得到一个Class的Type

6.GetType():得到一个Class的实例的Type

二、typeof 与GetType()的实例

namespace _2011._12._15
{
    class Program
    {
        static void Main(string[] args)
        {
            Test testone = new Test();                //生成Test类实例testone
            string s = testone.GetType().ToString();  //调用实例testone的GetType方法获取Type信息 
            Console.WriteLine("GetType():");
            Console.WriteLine(s);                     //_2011._12._15.Test  命名空间的Test类

            Type type = typeof(Test);                 //调用typeof方法获取Type信息,参数为类名Test 
            Console.WriteLine("Typeof():");
            Console.WriteLine(type);//_2011._12._15.Test  命名空间的Test类
            Console.WriteLine();

           MethodInfo[] methodinfo = type.GetMethods();//获取得到的type的methodinfo 

           Console.WriteLine(methodinfo.GetType());//System.Reflection.MethodInfo[]
            foreach (var i in methodinfo)
            {
                Console.WriteLine(i);//输出Test类的所有方法及继承Object的实例方法
            }
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine();
            /*结果
                GetType():
                _2011._12._15.Test
                Typeof():
                _2011._12._15.Test
                
                System.Reflection.MethodInfo[]   //methodinfo的Type信息
                Void speaking()                   //Test类的自定义方法 speaking()
                Void writing()                    //Test类的自定义方法 writing() 
                System.Type GetType()             //继承自Object 获取System.RuntimeType的方法 
                System.String ToString()          //继承自Object 获取当前对象的字符串表示的方法 
                Boolean Equals(System.Object)     //继承自Object 比较当前对象的方法 
                Int32 GetHashCode()               //继承自Object 返回当前对象的哈希值的方法 
            */
            
            
            MemberInfo[] memberinfo = type.GetMembers();  //获取得到的type的memberinfo
            Console.WriteLine(memberinfo.GetType());
            foreach(var i in memberinfo)
            {
                Console.WriteLine(i);//输出Test类字段和System.type类型
            }
            
            System.Reflection.MemberInfo[]
            /*结果
                Void speaking()                   //Test类的自定义方法 speaking() 
                Void writing()                    //Test类的自定义方法 writing() 
                System.Type GetType()             //继承自Object 获取System.RuntimeType的方法 
                System.String ToString()          //继承自Object 获取当前对象的字符串表示的方法 
                Boolean Equals(System.Object)     //继承自Object 比较当前对象的方法 
                Int32 GetHashCode()               //继承自Object 返回当前对象的哈希值的方法 
                Void .ctor()                      //构造函数
                System.String name                //Test类的自定义变量name
                
                由于Test类中的age为private属性,因此不会被得到
            */
            
            
            
        }


    }

    class Test
    {

        private int age;
        public string name;
        public void speaking()
        {
            Console.WriteLine("Welcome to cnblog!");
        }


        public void writing()
        {
            Console.WriteLine("Please writing something!");
        }
    }
}









你可能感兴趣的:(Unity,Editor学习)