C# GetType和typeof的区别

本文深入探讨了C#编程中typeof()运算符与GetType()方法的区别与应用,包括它们如何用于获取类型信息,以及它们在实际编程场景中的区别。通过实例演示,读者将了解到如何在不同情况下选择合适的类型获取方式。

typeof: The typeof operator is used to obtain the System.Type object for a type.

 

运算符,获得某一类型的 System.Type 对象。

 

Type t = typeof(int);

 

 

GetType: Gets the Type of the current instance.

 

            方法,获取当前实例的类型

 

             int i = 10;
Console.WriteLine(i.GetType());

 

区别:

 

  • Typeof()是运算符而GetType是方法
  • GetType()是基类System.Object的方法,因此只有建立一个实例之后才能够被调用(初始化以后)
  • Typeof()的参数只能是int,string,String,自定义类型,且不能是实例

     

  • GetType() typeof()都返回System.Type的引用。

     

    TypeOf() 和GetType()的区别:  

    (1)TypeOf():得到一个Class的Type

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

    override 一个方法的前担是这个方法在父类中:abstract or  virtual, override

         原文链接:http://www.cnblogs.com/tangself/archive/2009/12/06/1617885.html

C# 中,`GetType()` `typeof` 是用于获取类型信息的两种机制,但它们的使用方式、适用场景及背后的行为存在显著差异。以下将从多个角度深入解析两者的区别。 ### `GetType()` 方法 `GetType()` 是 `System.Object` 类中的一个虚方法,这意味着所有 .NET 类型都可以调用该方法。它在运行时返回对象的实际类型,即对象在内存中的具体类型。因此,`GetType()` 的结果取决于对象的实际实例,而不是变量的声明类型。 例如,以下代码中,尽管变量 `obj` 被声明为 `object` 类型,但其 `GetType()` 返回的是 `string` 类型: ```csharp object obj = "Hello"; Type type = obj.GetType(); // 返回 typeof(string) ``` 此方法适用于需要在运行时动态获取对象类型的场景,例如反射操作、序列化/反序列化逻辑,或者根据对象的实际类型执行特定逻辑。 ### `typeof` 运算符 `typeof` 是一个静态运算符,用于在编译时获取某个类型的 `Type` 对象。它接受一个类型名称作为参数,并返回该类型的 `Type` 实例。与 `GetType()` 不同,`typeof` 不需要对象实例即可使用,因为它依赖于编译时的类型信息。 例如,以下代码展示了如何使用 `typeof` 获取 `string` 类型的 `Type` 对象: ```csharp Type type = typeof(string); // 返回 typeof(string) ``` `typeof` 适用于需要在编译时确定类型信息的场景,例如泛型约束、静态方法调用或类型检查等。 ### 使用场景对比 | 特性 | `GetType()` | `typeof` | |------|-------------|----------| | 是否需要实例 | 是 | 否 | | 获取类型时机 | 运行时 | 编译时 | | 参数类型 | 实例 | 类型名称 | | 可变性 | 可变(取决于实例) | 不可变(固定类型) | ### 示例代码 以下代码展示了 `GetType()` `typeof` 在实际应用中的区别: ```csharp using System; class Program { static void Main() { object obj = new DerivedClass(); Type runtimeType = obj.GetType(); // 获取运行时类型 Console.WriteLine($"Runtime type: {runtimeType.Name}"); Type compileTimeType = typeof(BaseClass); // 获取编译时类型 Console.WriteLine($"Compile-time type: {compileTimeType.Name}"); } } class BaseClass { } class DerivedClass : BaseClass { } ``` 在这个例子中,尽管 `obj` 被声明为 `BaseClass` 类型,但其实际类型是 `DerivedClass`。因此,`obj.GetType()` 返回的是 `DerivedClass`,而 `typeof(BaseClass)` 返回的是 `BaseClass`。 ### 总结 - `GetType()` 用于在运行时获取对象的实际类型,适用于动态类型检查反射操作。 - `typeof` 用于在编译时获取类型信息,适用于静态类型检查泛型编程。 理解 `GetType()` `typeof` 的区别有助于编写更高效、准确的代码,特别是在涉及反射、泛型或动态类型处理的场景中。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值