GetType()是一个方法还是一个类?

6
我发现了这段代码:
int myInt = 0;
textBox1.Text = myInt.GetType().Name;

根据.NET文档,GetType()是一个方法,而不是一个类。
我的问题是,我如何使用带有方法的点号,例如GetType().Name

2
因为它返回一个对象,而对象具有可以使用点语法访问的属性。 - mishmash
8个回答

9

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

你的代码可以写成这样:

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

也许这样更容易理解。
编辑: 像 GetType() 这样的方法调用执行该方法,而在 . 之后所做的一切都适用于该方法的返回值,在本例中为类型为 Type 的对象。

1
感谢所有回答问题的人。这个答案很出色。 - EKanadily

5

GetType()是一个方法,返回一个类的实例(在这种情况下,是Type的实例)。

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


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

2

From 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

这里有一个演示

在这个案例中,Name属性是MemberInfo.Name属性。它包括System.Reflection命名空间。

获取此成员的名称。


2
这个术语通常被称为链式调用(在C#和JavaScript中),或者流畅接口。
所以,就像其他两个答案建议的那样,您将返回一个实例并执行该类的方法。
引用维基百科:
在软件工程中,流畅接口(由Eric Evans和Martin Fowler首次创造)是面向对象API的一种实现,旨在提供更易读的代码。
通过使用方法链接来传递后续调用的指令上下文实现流畅接口(但流畅接口不仅仅涉及方法链接)。通常,上下文是通过调用方法的返回值来定义的,它是自我参照的,其中新上下文等同于上一个上下文,并通过返回void上下文来终止。

1

Object.GetType() 返回当前实例的确切运行时类型。


示例:
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

1
因为GetType()返回一个对象,C#语言允许您调用返回的对象的任何成员,因此您的代码是一个非常有效的示例。
编辑:请查看Jobo的答案,以更好地理解如何以更易懂的形式编写您的代码。

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接