假设我有这个 C# 类:
public class HttpContextEx
{
public HttpContext context = null;
public HttpRequest req = null;
public HttpResponse res = null;
}
如何在函数内部声明它的对象,该对象将在堆栈上而不是堆上分配?
换句话说,我想避免使用“new”关键字。这段代码是bad:
HttpContextEx ctx = new HttpContextEx(); // << allocates on the heap!
我完全知道什么是堆栈/堆,并且听说过精彩的 C# GC,但我坚持在堆栈上分配这个小对象,这里只是为了方便。
这种态度来自 C++(我的主要工具),所以我不能忽视这一点,我的意思是它真的毁了我在这里的乐趣(:
如果您使用将其更改为值类型struct
并在方法体内创建一个新实例,它将在堆栈上创建它。但是,成员(因为它们是引用类型)仍将位于堆上。无论是值还是引用类型的语言仍然需要 new 运算符,但您可以使用var
消除类型名称的双重使用
var ctx = new HttpContextEx();
否则,请按原样使用 C#,因为 GC 的工作非常出色。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)