欢迎光临
我们一直在努力

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 关键字时,会在堆上初始化类型对象和普通对象。

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

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

赞(0) 打赏
未经允许不得转载:hosteons中文网 » C#类型转换和GetType方法

评论 抢沙发

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册