C#引用类型在传递给方法时是否分配新内存?

Gir*_*rdi 4 c# memory-management reference

大家......我是C#和其他语言的新手......

我读过Skeet的两篇文章,一篇关于堆/堆栈,另一篇关于引用类型和值类型.而且我认为我的问题很简单,但在阅读这些文章后我并未澄清.

传递给方法时引用类型是否分配新内存?

例如,如果我将表单传递给方法,例如

void myMethod(System.Windows.Forms.Form myForm)
{
...
}
Run Code Online (Sandbox Code Playgroud)

是否会分配更多的内存来存储所有myForm数据,或者只保留对myForm已经分配数据的位置的引用?

我担心的是,如果分配更多的内存来存储"附加"的所有内容myForm,很快内存就会变满,如果myForm是一个大的形式...

Nat*_*man 13

实例化原始表单时,表单对象将在堆上分配.当您调用myMethod时,您将按值传递引用类型(本质上是指向该对象的指针).这意味着您传入的引用将在myMethod的上下文中复制 - 这涉及32/64位堆栈分配,具体取决于您的体系结构.

因此,要回答您的问题,您的表单将不会被复制,但对其的引用将是.

免责声明:我很久没有使用过C#了.