【问题标题】:Static assignment of object instead of dynamic reference对象的静态分配而不是动态引用
【发布时间】:2019-05-07 19:00:17
【问题描述】:

我想将一个对象静态分配给这些对象中的一组。在下面代码的末尾,CO_m_contractInfo 数组中的所有三个条目 (0,1,2) 都指向 m_contractInfo,其中包含来自第三个合约的信息。希望数组包含第一个、第二个和第三个合约的静态信息。

如何实现静态分配,以便数组包含所有 3 个合同的合同信息?

Private m_contractInfo As IBApi.Contract

Public CO_m_contractInfo() As Contract

ReDim CO_PO_m_contractInfo(0 To 10)

' info from 1st contract loaded into m_contractInfo

CO_m_contractInfo(0) = m_contractInfo

' info from 2nd contract loaded into m_contractInfo

CO_m_contractInfo(1) = m_contractInfo

' info from 3rd contract loaded into m_contractInfo

CO_m_contractInfo(2) = m_contractInfo

' at this point, all three entries (0,1,2) in the CO_m_contractInfo 
' array point to m_contractInfo which contains info from 3rd contract

【问题讨论】:

    标签: arrays vb.net object


    【解决方案1】:

    如果您的问题是该数组包含三个指向同一个对象的指针并且不应该,那么答案是您必须在每次将 m_contractInfo 变量添加到数组时都将其添加到新的变量中,以便它每个都是不同的实例时间。

    【讨论】:

    • 感谢您花时间和精力进行审查和回答。我想我想要的是数组每个成员中 m_contractInfo 内容的静态副本,其中 (0) 持有第一个合约的静态副本, (1) 持有第二份合约的静态副本,以及 (2) 持有第三份合约的副本。如果 CO_m_contractInfo 数组每次都是 Redim'd ... 之前加载到 CO_m_contractInfo 中的指针不会是无效的吗?
    • 我明白了。 Redim'ing 不会使数组中已经存在的元素无效,但这不是您的问题。我认为您要寻找的是每个合同阶段的对象快照。 1,2 和 3. 因为您正在存储引用指针,显然对对象的任何更改都会影响指向它的所有指针。避免这种情况的唯一方法是在每个阶段制作对象的副本并将其存储在每个元素中。这篇文章可能有用。 infoworld.com/article/3109870/…
    • 欣赏信息和参考。仍然无法找到反映我的挑战的示例,即将对象的单个实例复制到对象实例数组中。在示例中,“克隆”是在 Dim 语句中完成的......而在我的情况下,我想要复制/克隆到的数组已经被 Redim'd。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 2020-03-12
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    相关资源
    最近更新 更多