在 C# 中获取 x 的静态类型

本文关键字:静态 静态类 类型 获取 | 更新日期: 2023-09-27 18:35:39

我有这个类结构:

class A     {   }
class B:A   {   }
A x = new B();

这是运行时类型:

x.GetType(); //B

如何获取其编译时类型?

我尝试了typeof (x) - 但参数必须是一种类型......

我的愿望答案是:A

编辑

我为什么要问它?

因为我认为int是通过polymorphic引擎初始化的:

像这样:

object myInd = new Int32(); / /this DOES compile 

我想验证我的假设:

它来自对象吗?

为了做到这一点 - 我必须知道它的静态类型......

在 C# 中获取 x 的静态类型

您可以创建一个泛型方法:

Type StaticTypeOf<T>(T t)
{
  return typeof(T);
}

要调用它:

object i = 1;
// Writes out System.Object
Console.WriteLine(StaticTypeOf(i).ToString());
这是一个解决方案 -

即使我看不出解决方案解决的问题是什么;-)

正如其他人的评论中所述 - 对象的静态类型是你在编译时自己告诉编译器的东西。在运行时找出它绝对没有意义。

object myInd = new Int32(); / /this DOES compile 

这编译不是因为"int 是通过多态引擎初始化的",而是因为在 C# 中所有内容都可以转换为类型 object 。这是不一样的。

从值类型(如Int32)到object的转换是通过boxing的过程实现的。您可以在此 msdn 页面上阅读有关它的所有信息:http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx。