首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么未装箱类型有方法?

为什么未装箱类型有方法?
EN

Stack Overflow用户
提问于 2011-10-26 23:11:03
回答 4查看 306关注 0票数 1

为什么你能做这样的事

代码语言:javascript
运行
复制
int i = 10;
i.ToString();
'c'.Equals('d');
1.ToString();
true.GetType();

在C#?这些东西要么是原始的、字面的、未装箱的,要么是这些东西的任何组合;那么它们为什么有方法呢?--它们不是对象--,所以不应该有方法。这是其他语法的糖吗?如果是,什么?我可以理解有这样的功能,例如:

代码语言:javascript
运行
复制
string ToString(int number)
{
  // Do mad code
  return newString;
}

但在这种情况下,您可以将其称为函数,而不是方法:

代码语言:javascript
运行
复制
string ranch = ToString(1);

这里发生了什么事?

编辑:

刚刚意识到C#不再是一个java克隆人了,规则完全不同了。oops :P

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-26 23:24:11

他们的行为是那样的,因为规范是这么说的(而且非常好):

1.28值类型 值类型要么是结构类型,要么是枚举类型。C#提供了一组预定义的结构类型,称为简单类型。简单的类型是通过保留的词来识别的。

..。

1.28.4简单类型 C#提供了一组预定义的结构类型,称为简单类型。简单类型通过保留字来标识,但这些保留字只是系统命名空间中预定义的结构类型的别名,如下表所述。

..。

因为简单类型别名为结构类型,所以每个简单类型都有成员。例如,int具有在System.Int32中声明的成员和从System.Object继承的成员,并且允许使用以下语句: int I= int.MaxValue;// System.Int32.MaxValue常量字符串s= i.ToString();// System.Int32.ToString()实例方法字符串t= 123.ToString();// System.Int32.ToString()实例方法 简单类型与其他结构类型不同,因为它们允许某些附加操作: 大多数简单类型允许通过编写文字来创建值(第1.16.4节)。例如,123是int类型的文字,'a‘是char类型的文字。C#一般不提供结构类型的文本,其他结构类型的非默认值最终总是通过这些结构类型的实例构造函数创建的。

正如规范所解释的那样,简单类型具有一些超级功能,比如成为const的能力,这是一种特殊的字面语法,可以用来代替新语法,以及在编译时要计算的容量(2+2实际上在最终的MSIL流中被写为4)。

但是方法(以及操作人员)并不是一个特殊的超级力量,所有的结构都可以拥有它们。

规范(对于C# 4.0,我的复制粘贴来自早期版本)可以从microsoft网站:C#语言规范下载。

票数 6
EN

Stack Overflow用户

发布于 2011-10-26 23:30:09

Eric最近的一篇文章继承和表示解释道。(破坏者:您混淆了继承和表示。)

不确定为什么声称整数i、字符'c'和整数1不是对象。他们是。

票数 6
EN

Stack Overflow用户

发布于 2011-10-26 23:14:26

在C#中,所有原语类型实际上都是结构。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7910003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档