问题描述
- c#引用类型是怎么创建的,新手不大懂
-
想问各位大神一个问题TcpClient remoteClient = listener.AcceptTcpClient();
这句话中没有new 但是程序在堆中分配内存了吗
还有类似的 string str = 。。。.ToString();
解决方案
AcceptTcpClient返回的,AcceptTcpClient内部会产生一个对象
解决方案二:
AcceptTcpClient会创建。
string很特殊,当你写"abc",就会分配内存了。
另外在栈上分配值类型、结构体也不要new
解决方案三:
listener.AcceptTcpClient();
这个是一种很常见的模式,叫做工厂模式。
比如,DataRow就不能由客户创建,它由DataTable去创建并且由NewRow返回。
另外单例模式中,我们也会封闭构造函数,由内部创建。
解决方案四:
肯定会分配,不过既然你玩C#就不要过于去考虑内存的问题,交给微软去做吧。
解决方案五:
内存,确实是分配了。但不一定是在这一句,而可能是在 listener 的创建、或者 listener 执行的某一步就完成分配了,供后续代码来引用。具体 的分配由系统实现,不用太关心。
string str = 。。。.ToString(); 确实是在这一句分配了内存。
解决方案六:
肯定会分配,不过既然你玩C#就不要过于去考虑内存的问题,交给微软去做吧。
解决方案七:
23个设计模式的一种:工厂模式
解决方案八:
listener.AcceptTcpClient();
这个方法内部new了一个新的对象TcpClient ,并将这个对象作为结果返回了!!!
时间: 2024-10-31 10:49:57