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!");
}
}
}