【问题标题】:VB.Net, EventArgs, ByRef and ByValVB.Net、EventArgs、ByRef 和 ByVal
【发布时间】:2012-01-21 11:25:21
【问题描述】:

在 VB.Net 中,我有一个名为 WorkflowButtonEventArgs 的对象,它继承自 System.EventArgs

WorkflowButtonEventArgs 类包含两个 ByRef 属性。这些是内存中的对象,我不希望它们以任何方式复制或复制。

我可以在 VB.Net 中传递WorkflowButtonEventArgs 对象ByVal 并让它仍然保留WorkflowButtonEventArgs 中的两个ByRef 定义吗?

具体来说,如果我通过 ByVal:

Dim e As New WorkflowButtonEventArgs(...) ' e has some ByRef properties

RaiseEvent SomeEventName(e) ' e is passed ByVal

eWorkflowButtonEventArgs 类)中的ByRef 属性/成员不会在内存中复制或复制吗?

长话短说:我可以传递eByVal,还是我需要传递ByRef,因为它包含ByRef 属性?

【问题讨论】:

  • “ByRef”属性是指引用类型的属性,例如类吗?
  • 什么是“ByRef”属性?据我所知,ByRef 关键字不适用于属性,也不能在声明属性时使用。你能说得更具体点吗?

标签: asp.net vb.net byref eventargs byval


【解决方案1】:

实现目标的另一种方法是创建一个存储这两个属性的单例。

【讨论】:

    【解决方案2】:

    引用对象不会在内存中重复。参数上的ByRef 关键字仅意味着您可以更改调用代码中参数基础的变量的值。

    【讨论】:

    • 致所有人:对于原帖中的错误,我深表歉意。属性是引用类型变量(特别是类/对象)。听起来我可以传递事件arg“ByVal”,并且事件arg中的引用类型Properties不会在内存中重复。听起来对吗?
    • 引用对象不会在内存中复制。 ByVal 或 ByRef 无关紧要
    • 好的...这回答了我的问题。谢谢大家。
    【解决方案3】:

    我可以传递“ByVal”,还是需要传递“ByRef”,因为它包含“ByRef”属性?

    是的。引用指向的对象不会被复制,即使您的 EventArgs 传递了 ByVal。

    【讨论】:

      猜你喜欢
      • 2018-06-13
      • 2019-04-11
      • 2013-03-16
      • 1970-01-01
      • 2020-06-30
      • 2011-06-21
      • 1970-01-01
      • 2015-02-15
      • 1970-01-01
      相关资源
      最近更新 更多