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

想问各位大神一个问题

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

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

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

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

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

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

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

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

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

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