GetType()和GetType()之间的区别.UnderSystemType

时间:2012-11-25 13:58:34

标签: c# reflection types

我已经阅读了“UnderlyingSystemType”的定义,即它“表示公共语言运行库提供的代表此类型的类型”。

When does the UnderlyingSystemType differ from the current Type instance上有关于SO的相关链接,但我无法从答案中看出是否实际上有一个对象的类型与UnderlyingSytemType不同。

我最近了解了CLS合规性,并且未签名的int不符合CLS。而且我真的希望可能会这样做,非CLS兼容类型可能有不同的底层类型,但事实并非如此。

对于它的价值,我用来测试的代码是:

Byte    t01 = 1;
SByte   t02 = 1;
Int16   t03 = 1;
UInt16  t04 = 1;
Int32   t05 = 1;
UInt32  t06 = 1;
Int64   t07 = 1;
UInt64  t08 = 1;
Single  t09 = 1;
Double  t10 = 1;
Decimal t11 = 1;
Console.WriteLine(t01.GetType().Equals(t01.GetType().UnderlyingSystemType));
Console.WriteLine(t02.GetType().Equals(t02.GetType().UnderlyingSystemType));
Console.WriteLine(t03.GetType().Equals(t03.GetType().UnderlyingSystemType));
Console.WriteLine(t04.GetType().Equals(t04.GetType().UnderlyingSystemType));
Console.WriteLine(t05.GetType().Equals(t05.GetType().UnderlyingSystemType));
Console.WriteLine(t06.GetType().Equals(t06.GetType().UnderlyingSystemType));
Console.WriteLine(t07.GetType().Equals(t07.GetType().UnderlyingSystemType));
Console.WriteLine(t08.GetType().Equals(t08.GetType().UnderlyingSystemType));
Console.WriteLine(t09.GetType().Equals(t09.GetType().UnderlyingSystemType));
Console.WriteLine(t10.GetType().Equals(t10.GetType().UnderlyingSystemType));
Console.WriteLine(t11.GetType().Equals(t11.GetType().UnderlyingSystemType));

跑步的时候,我得到了一堆真他。

我的问题是,在某种情况下,对象的基础系统类型可能与其类型不同吗?这种区别的目的是什么,它只是允许定义无法实例化的假设类型?我甚至无法使用new关键字创建新的Type。 Type的所有属性都是get-only,所以我对这个功能的作用感到迷茫。区别在其他语言中有用吗?

1 个答案:

答案 0 :(得分:3)

Type是一个抽象类。您将看到的最常见的实现是RuntimeType,它通常是对象,但任何人都可以创建Type的实现。 RuntimeType的{​​{1}}只会返回相同的UnderlyingSystemType。据我所见,如果你有一个方法需要RuntimeType或在本地构造这样的类型,这不是非常重要,而不是你得到一个对象并调用Type。以下是帮助您理解的示例:

GetType