1

我有这个类结构:

class A     {   }
class B:A   {   }

A x = new B();

这是运行时类型:

x.GetType(); //B

我怎样才能得到它的编译时类型?

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

我渴望的答案是:A

编辑

我为什么要问它?

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

像这样的东西:

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

我想验证我的假设:

它来自对象吗?

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

4

2 回答 2

12

您可以创建一个通用方法:

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

调用它:

object i = 1;

// Writes out System.Object
Console.WriteLine(StaticTypeOf(i).ToString());

这是一个解决方案-即使我看不到该解决方案解决的问题是什么;-)

于 2012-05-27T19:04:04.793 回答
1

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

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

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

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

于 2012-05-27T20:21:38.577 回答