【问题标题】:DataGridView: Pass by Value or Reference?DataGridView:按值或引用传递?
【发布时间】:2010-12-17 12:42:45
【问题描述】:

我认为 DataGridView 会占用内存。通过值传递datagridview还是通过引用更好?它甚至应该通过吗?

【问题讨论】:

    标签: c# datagridview pass-by-reference pass-by-value


    【解决方案1】:

    从内存的角度来看,通过值或引用传递它并不重要,因为 DataGridView 是引用类型,而不是值类型。

    【讨论】:

    • 你怎么可以使用ref关键字来传递一个datagridview呢?参考的参考?看起来很奇怪。
    • @Brian 如果您通过引用传递引用类型,那么您将传递调用者正在使用的引用。因此,例如,如果您将参数分配给函数内的新 DataGridView,调用者会看到他们的对象变成了新的 DataGridView,这可能是您想要的,也可能不是。如果改为按值传递,则传递的是引用的副本,因此为参数分配新的 DataGridView 对调用方没有影响。
    • @Brian 引用/值类型与 ref out 修饰符无关。修饰符应用于变量而不是它们持有的值。引用类型的变量上的 ref 修饰符意味着通过传递该变量不会生成引用的副本,而是调用函数将使用与调用者相同的变量
    【解决方案2】:

    DataGridView 类型是一个引用类型,因此不可能通过值传递 object。您可以通过值将 reference 传递给对象,但这是一个非常小的(通常是指针大小的)值。

    【讨论】:

      【解决方案3】:

      添加到约瑟夫的答案中,所有通过值传递它都是在调用方法堆栈框架中的调用堆栈上创建一个新变量,并将 DataGridView 对象的地址(在堆中)复制到该变量中以供使用被调用的方法。这一切都是为了防止被调用的方法将新的 DataGridView 对象的地址分配给 caller(调用方法)中的变量,从而改变 which 调用者将指向的 dataGridView。

      【讨论】:

        【解决方案4】:
        1. 您不会(不需要)经常通过任何控制
        2. 您根本无法传递对象本身。
        3. 您只能将引用传递给对象,并且通过值(默认)或通过引用(ref 参数)这样做对内存使用没有影响。这是一个设计决策,但通常,当然对于控件,您将按值传递引用。

        【讨论】:

        • 有没有办法将 DataGridView 传递给需要信息或在 datagridview 上执行功能的方法,例如设置列样式?必须有一些巧妙的方法来做到这一点。
        • 不,没有办法。而且没有必要。
        • 没有通过 DGV。您正在传递一个很小的引用。
        猜你喜欢
        • 2012-01-16
        • 2012-10-14
        • 1970-01-01
        • 1970-01-01
        • 2019-05-07
        • 2012-03-12
        • 2013-09-15
        • 1970-01-01
        • 2021-11-04
        相关资源
        最近更新 更多