GetType()是方法还是类?

时间:2013-01-30 08:45:37

标签: c# .net reflection

我遇到了这段代码:

int myInt = 0;
textBox1.Text = myInt.GetType().Name;

根据.NET documentation,GetType()是一个方法,而不是一个类。

我的问题是,如何使用方法来使用点,例如GetType().Name

8 个答案:

答案 0 :(得分:9)

方法可以返回类实例,这里是类Type的实例。在此对象上,您可以访问属性,其他方法等。

您的代码可以写成:

int myInt = 0;
Type t = myInt.GetType();
textBox1.Text = t.Name;

这样可能更容易理解。

编辑: 类似GetType()的方法调用会执行该方法,而.之后执行的所有操作都会应用于方法的返回值,在本例中为Type类型的对象。

答案 1 :(得分:5)

GetType()返回类的实例的方法(在本例中是Type class的实例。

通过点语法访问返回的Type实例的成员。

答案 2 :(得分:4)

因为GetType()返回对象的实例,所以可以使用点来访问它返回的对象的属性或方法。

答案 3 :(得分:2)

这个术语通常被称为链接(当然在C#和JavaScript中)或流畅的界面。

因此,在建议的其他两个答案中,您将返回一个实例并执行属于该类的方法。

引用维基百科:

  

在软件工程中,一个流畅的界面(由Eric Evans和   Martin Fowler)是面向对象API的实现,旨在提供   更易读的代码。

     

通常通过使用方法链来中继指令来实现流畅的接口>后续调用的上下文(但流畅的界面不仅仅需要方法   链接)。通常,上下文是   通过被调用方法的返回值定义   自我引用,其中新上下文等同于最后一个上下文   通过返回无效的上下文终止。

答案 4 :(得分:2)

来自MSDN;

Return Value
Type: System.Type
The exact runtime type of the current instance.

基本上,它返回一个类实例。这就是为什么你也可以访问它的属性。我们来看看这个例子;

int i = 0;
Console.WriteLine(i.GetType()); // Gets the System.Type of the current instance.
Console.WriteLine(i.GetType().Name); // Gets the name of the current member.

输出

System.Int32
Int32

这是DEMO

在这种情况下,Name属性为MemberInfo.Name属性。它包括System.Reflection命名空间。

  

获取此成员的名称。

答案 5 :(得分:1)

Object.GetType()返回current instance的确切运行时类型。


示例:

using System;

public class MyBaseClass {
}

public class MyDerivedClass: MyBaseClass {
}

public class Test 
{
   public static void Main() 
   {
      MyBaseClass myBase = new MyBaseClass();
      MyDerivedClass myDerived = new MyDerivedClass();
      object o = myDerived;
      MyBaseClass b = myDerived;

      Console.WriteLine("mybase: Type is {0}", myBase.GetType());
      Console.WriteLine("myDerived: Type is {0}", myDerived.GetType());
      Console.WriteLine("object o = myDerived: Type is {0}", o.GetType());
      Console.WriteLine("MyBaseClass b = myDerived: Type is {0}", b.GetType());
   }
}
// The example displays the following output: 
//    mybase: Type is MyBaseClass 
//    myDerived: Type is MyDerivedClass 
//    object o = myDerived: Type is MyDerivedClass 
//    MyBaseClass b = myDerived: Type is MyDerivedClass 

参考:MSDN

答案 6 :(得分:1)

因为GetType()返回一个对象,所以C#语言允许你调用被返回对象的任何成员,所以你的代码是一个非常有效的例子。

编辑:检查Jobo的答案,以便更好地了解如何以更易于理解的形式编写代码

答案 7 :(得分:1)

GetType()获取表示指定类型的Type对象。 Type表示类类型,接口类型,数组类型,值类型,枚举类型,类型参数,泛型类型定义。在类型上,您可以访问方法或属性。