2 tabe123 tabe123 于 2015.07.09 16:33 提问

c#引用类型是怎么创建的,新手不大懂
c#

想问各位大神一个问题

TcpClient remoteClient = listener.AcceptTcpClient();
这句话中没有new 但是程序在堆中分配内存了吗
还有类似的 string str = 。。。.ToString();

8个回答

bdmh
bdmh   Ds   Rxr 2015.07.09 16:36

AcceptTcpClient返回的,AcceptTcpClient内部会产生一个对象

mqjgirlboy
mqjgirlboy 回复tabe123: Text 是text1的一个属性,是string类型值,所有类型的基类Object有.Tostring()方法,所以所有类型都有.Tostring(),返回你方法运行后的数据。
2 年多之前 回复
tabe123
tabe123 谢谢老师 那比如 string str = text1.Text.ToString() 也是有text1产生的一个对象吗
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2015.07.09 16:54

AcceptTcpClient会创建。
string很特殊,当你写"abc",就会分配内存了。
另外在栈上分配值类型、结构体也不要new

caozhy
caozhy   Ds   Rxr 2015.07.09 16:58

listener.AcceptTcpClient();
这个是一种很常见的模式,叫做工厂模式。
比如,DataRow就不能由客户创建,它由DataTable去创建并且由NewRow返回。
另外单例模式中,我们也会封闭构造函数,由内部创建。

zstar
zstar   2015.07.09 16:36

肯定会分配,不过既然你玩C#就不要过于去考虑内存的问题,交给微软去做吧。

91program
91program   Ds   Rxr 2015.07.09 16:49

内存,确实是分配了。但不一定是在这一句,而可能是在 listener 的创建、或者 listener 执行的某一步就完成分配了,供后续代码来引用。具体 的分配由系统实现,不用太关心。

string str = 。。。.ToString(); 确实是在这一句分配了内存。

u012401478
u012401478   2015.07.09 17:13

肯定会分配,不过既然你玩C#就不要过于去考虑内存的问题,交给微软去做吧。

frank_20080215
frank_20080215   2015.07.09 20:47

23个设计模式的一种:工厂模式

miracle_yao
miracle_yao   2015.07.28 13:55

listener.AcceptTcpClient();
这个方法内部new了一个新的对象TcpClient ,并将这个对象作为结果返回了!!!

Csdn user default icon
上传中...
上传图片
插入图片