2012-04-05 55 views
0

可能重复:
How do ValueTypes derive from Object (ReferenceType) and still be ValueTypes?如何在C#中处理数字?

我能写这样的代码,

String s = 10.ToString(); 

的ToString()才会来当特定对象是继承类'Object'(当然,所有的类都继承了c#中的Object)。它是否也继承了类“对象”的10号。如果是这样如何?

+0

这是一个在这个网站上多次提出的问题。 尝试看[这里](http://stackoverflow.com/questions/4729094/value-types-inherit-from-system-object-why) 希望你找到你想要的。 – phadaphunk 2012-04-05 18:56:56

+1

我不同意这是以前链接问题的重复。 – jason 2012-04-05 19:00:00

+0

@Jason怎么这样? – NullUserException 2012-04-05 19:05:18

回答

4

它是否也继承了类“对象”。如果是这样如何?

按照说明书,字面10被编译器解释为Int32的实例。 Int32继承自object。因此,10是从object继承的类型的一个实例。因此,它有一个名为ToString的实例方法。

+0

由编译器解释? - >我已经NT编译的代码还 – deen 2012-04-05 19:14:55

+1

@Ala。 :这里的“编译器”指的是在Visual Studio中有不断运行的“进程”对你的代码进行语法分析和语义分析其中之一是Intellisense功能。在这里,“编译器”执行将“10”解释为“Int32”的文字实例的语法分析,并且使用该分析向Intellisense提供信息,即“10”是“Int32”的实例以及当前可访问哪些方法,包括那些可以通过'Int32'从'object'继承的事实来访问。 – jason 2012-04-05 19:19:25

+0

@Ala总结Jason的评论:编译器在你输入时不断运行。但是,如果删除“由编译器解释”,Jason的答案仍然正确。考虑:“根据规范,文字'10'是Int32的一个实例。” – phoog 2012-04-05 20:45:58

0

很简单,所有的基元,包括文字,都是.NET中的对象,所以继承了.NET对象所有的方法(包括ToString())。有关将基元映射到.NET对象的信息,请参阅MSDN文档:http://msdn.microsoft.com/en-us/library/ms228360(v=VS.80).aspx

+3

@mydogisbox:此无关拳击绝对没有 – jason 2012-04-05 18:59:25

+0

@mydogisbox:从MSDN文档直接:“所有的原始数据类型在C#是在System命名空间中的物体“你确定你没有想到Java,它使用包装的 – 2012-04-05 19:01:12

+0

啊,对你是 – mydogisbox 2012-04-05 19:03:04