在 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
我想验证我的假设:
它来自对象吗?
为了做到这一点 - 我必须知道它的静态类型......
您可以创建一个泛型方法:
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。