为什么string不需要new?

jjf120801 2009-03-11 07:51:03
C#中,定义一个类的对象需要new,比如:CLASS A = new CLASS;
为什么string不需要new呢? string a = "abcd";
...全文
998 62 打赏 收藏 转发到动态 举报
写回复
用AI写文章
62 条回复
切换为时间正序
请发表友善的回复…
发表回复
wartim 2009-04-10
  • 打赏
  • 举报
回复
.net框架设计书里说过了,是特例,简化写法,CLR自动会处理
我感觉应该是编译器对String的“=”运算符重载过了
Roc_Lee 2009-04-10
  • 打赏
  • 举报
回复
string是个特例
believeken 2009-04-09
  • 打赏
  • 举报
回复
要做高手 就要抓住每个细节 问题虽小 但是也能引发很多思考!~~~~up!
junyi2003 2009-04-09
  • 打赏
  • 举报
回复
本来是需要New的,为了开发方便。C#给他特权了,没啥可以争论的吗。你可以看做编译器特例过了。

Int Double 也是一样啊。 没啥好争论的吗.....
Myth_NiuNiu 2009-04-09
  • 打赏
  • 举报
回复
楼主你真牛
Myth_NiuNiu 2009-04-09
  • 打赏
  • 举报
回复
楼主你真牛
Myth_NiuNiu 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ojlovecd 的回复:]
因为string类要经常使用,所以把它做成了预置类型,预置类型都是可以通过=来直接实例化的,像vrhero说的,这是特权,使用时记得它是引用类型就好了
[/Quote]
学习了
jjf120801 2009-04-09
  • 打赏
  • 举报
回复
大家都没说清楚.我弄懂了与各位分享.
第一,我的问题是为什么不需要new,没说不可以new

第二,这个问题不无聊,它牵涉到隐式转换的问题(关键字:implicit)

第三,正确答案:应为String类里声明了隐式的用户定义类型转换运算符,也就是帮你把new做掉了,如下:
>>隐式转换:
public static unsafe implicit operator String(char *strings)
{
return new String(strings);
}
a12321321321312321 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 vrhero 的回复:]
引用 15 楼 ProjectDD 的回复:
现在C#还告诉你值对象可以不用写new;

理解错误...谁告诉你“值对象可以不用写new”?

你新建个值类型看需不需要new...都说了内置类型是特权了,和引用类型还是值类型无关...只不过刚好内置类型里只有string一个是引用类型...
[/Quote]
ProjectDD 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 ojlovecd 的回复:]
引用 15 楼 ProjectDD 的回复:

string s; //OK 已经与值类型一样,申明时已经实例化,但内部机制…

你这样写s是null,还没有实例化
[/Quote]

string 实例的null与 ""有什么区别吗?

int i;这就是已经实例化了,相当于int i=0;存储位置在申明时已经做好了,请你搞清楚..
snowflychen 2009-03-12
  • 打赏
  • 举报
回复
学习了
vbman2003 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 51 楼 jhkemail 的回复:]
string不是对象,是变量。。。。
StringBuilder是对象,需要new。。。。
因为string并不是放在堆里的(如果记错大家原谅)
[/Quote]

错! net中所有皆对象
可以:
string s=new string('a',5);
破碎的脸 2009-03-12
  • 打赏
  • 举报
回复
string不是对象,是变量。。。。
StringBuilder是对象,需要new。。。。
因为string并不是放在堆里的(如果记错大家原谅)
ztenv 2009-03-12
  • 打赏
  • 举报
回复
你还可以str1=str2来比较呢;
zhiwei117 2009-03-12
  • 打赏
  • 举报
回复
可能是在父类已经给你new 好了把,堆是由程序员进行空间的自动分配和释放,而栈是由编译器进行自动分配和释放,两者相比较来说栈处理速度要比栈快,一般值类型分配在栈上,而引用类型分配在堆上的
j45kp 2009-03-12
  • 打赏
  • 举报
回复
类的引用要实例化
string是一个基本的数据类型 赋值
ls3697264 2009-03-12
  • 打赏
  • 举报
回复
UP
sjt000 2009-03-12
  • 打赏
  • 举报
回复
string是.net的一个基本的数据类型

基本数据类型都可以直接赋值来创建
wolf1118baby 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 TkingCN 的回复:]
这个问题 问得太.....
你弄清楚 什么是string 就知道 为什么不需要new勒
[/Quote]
支持
pennymay 2009-03-12
  • 打赏
  • 举报
回复
内置类型都不用new...人家是嫡系,有特权..
加载更多回复(42)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧