C#类型转换和GetType方法

  • 内容
  • 评论
  • 相关

在运行时,可以通过 GetType 方法获得对象指向的类型对象的类型。

当需要类型转换时,有如下的几种情况:

  • 将一个对象转换为它的基类型。
  • 将一个对象转换为它的派生类型。
  • 将一个对象转换为和它无关的类型(不是基类也不是派生类)。

假设我们有如下的两个类:

public class A
{
    public int a { get; set; }
}
publie class B : A
{
    public int b { get; set; }
}

将一个对象转换为它的基类型

这种情况永远都能转换成功,所以 C# 不要求额外的语法。当然,也可以使用显式转换:

A a = new B();
Console.WriteLine(a.GetType() ) ; // B
A a2 = (A)new B();
Console.WriteLine (a2 . GetType () ) ; // B

此时,我们看到 GetType 方法返回的值是“当前命名空间名 .B”。

但是如果我们试图在 Visual Studio 中访问对象 a/a2 的成员,会发现它只有 a —个成员,并没有 b (实际上,可以编写 IL 访问 B 的方法)。那么 a/a2 的类型究竟是什么呢?(答案是A)

实际上,根据之前对象初始化的知识,我们已经知道,在使用 new 关键字时,会在堆上初始化类型对象和普通对象。

当我们运行完上面的四行代码之后,内存中的布局大家应该可以想象出来了,如下图所示。

运行完上面四行代码后的内存布局

本文标题:C#类型转换和GetType方法

本文地址:https://www.hosteonscn.com/5019.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注