您当前的位置: 首页 >  c#

Peter_Gao_

暂无认证

  • 0浏览

    0关注

    621博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C# typeof() 和 GetType()区别

Peter_Gao_ 发布时间:2021-08-21 17:17:30 ,浏览量:0

总得来说他们都是为了获取某个实例具体引用的数据类型System.Type。

1、GetType()方法继承自Object,所以C#中任何对象都具有GetType()方法,x.GetType(),其中x为变量名,由x实例返回得到一个类型

2、typeof(x)中的x,必须是具体的类名、类型名称等,不可以是变量名称,返回一个类型

3、System.Type.GetType(),有两个重载方法

比如有这样一个变量i: Int32 i = new Int32();

使用GetType(),i.GetType()返回值是Int32的类型,但是无法使用typeof(i),因为i是一个变量,

使用typeof(),则只能:typeof(Int32),返回的同样是Int32的类型。

下面我们具体来看下相关类的介绍:

System.Type类 System.Type类定义了很多成员,可以用来检查某个类型的元数据,它们返回的类型大多位于System.Reflection命名空间中。

举例来说,

Type.GetMethods()返回一个MethodInfo类型的数组,

Type.GetFields返回一个FieldInfo类型的数组等。

System.Type提供的完整的成员组是很容易扩展的。

使用System.Object.GetType()得到Type引用 可以用多种方法得到一个Type类的实例。但是,由于Type是一个抽象类,所以不能直接使用new关键字创建一个Type对象。对此我们的首选是:使用System.Object定义的GetType()方法,它返回一个表示当前对象元数据的Type类的实例:

实例得到类型:

//使用一个SportsCar实例得到类型信息 SportsCar sc = new SportsCar(); Type t = sc.GetType();

显而易见,要想使用这个方法,必须得到类型的编译时信息(这里是SportsCar类),并且当前在内存中类型实例。

使用typeof()得到Type引用 另一个取类型信息的方法是使用C# typeof操作符:

类名得到类型:

//根据类名使用typeof得到类型 Type t = typeof(SportsCar); // 参数SportsCar是类名

类似System.Object.GetType(),使用typeof操作符,我们不需要建立一个实例来提取类型信息。但是,仍然需要知道类型的编译时信息,因为typeof需要的是类型的强类型名称,而不是文本表示。

使用System.Type.GetType()得到Type引用 为了以更灵活的方式得到类型信息,我们可以调用System.Type类的静态成员GetType(),然后指定类型的完全限定名。采用这种方法,我们不需要得到正从中提取元数据的类型的编译时信息,

1)Type.GetType()方法被重载一:

允许我们指定两个布尔类型的参数,一个用来控制当类型找不到时是否抛出异常,另一个用来指示是否区分字符串大小写。

例如: //使用静态的Type.GetType()方法获取类型信息(如果SportsCar没有找到,则忽略不抛出异常信息) Type t = Type.GetType("CarLibrary.SportsCar", false, true);

2)Type.GetType()方法被重载二:

在上面的例子中,注意传入GetType()的字符串没有包含类型所在的程序集信息。在这种情况下,该类型便被认为是定义在当前执行的程序集中。但是,当希望得到一个外部私有程序集的类型元数据时,字符串参数必须使用类型完全限定名,加上类型所在的程序集的名字(每一个都用逗号隔开):

//得到外部程序集中类型的类型信息 Type t= Type.GetType("CarLibrary.SportsCar, CarLibrary");

示例代码

using System;
using System.Reflection;
public class Program
{
    public int sampleMember;
    public void SampleMethod() { }
    static void Main()
    {
        Type t = typeof(Program);
        //也可通过下面这种方式操作
        //Program obj = new Program();
        //Type t = obj.GetType();
        Console.WriteLine("========Methods====================");
        MethodInfo[] methodInfo = t.GetMethods();
        foreach (MethodInfo mInfo in methodInfo)
            Console.WriteLine(mInfo.ToString());
        Console.WriteLine("========Members====================");
        MemberInfo[] memberInfo = t.GetMembers();
        foreach (MemberInfo mInfo in memberInfo)
            Console.WriteLine(mInfo.ToString());
        Console.ReadLine();
    }
}

运行结果如下

    原文链接:https://blog.csdn.net/letianok/article/details/7257117

 

 

 

关注
打赏
1664521772
查看更多评论
立即登录/注册

微信扫码登录

0.0403s