0

我想将对象传递给另一个类以对其进行修改,并且我希望对它所做的更改传播到从中获取它的类实例中的该对象。这应该与此代码一起使用:

public class sth{
private:
Object^ thisObject;
public: sth(Object^ ob)
{
    this->thisObject=ob;
}
void someFunct()
{
   this->thisObject=gcnew Object();
}
};

但它不起作用。另一方面,这段代码:

public: sth(Object^& ob)
{
    ob=gcnew Object();
}

工作正常,但如果我希望这个句柄被类构造函数不调用的某个方法使用,我必须创建一个我认为的全局句柄(因为 c++/cli 句柄是一个指向引用的指针)以这种方式是可能的:

public class sth{
private:
Object^ thisObject;
public: sth(Object^% ob)
{
    this->thisObject=ob;//this doesn't works
    /*ob = this->thisObject;*///this neither
}
void someFunct()
{
   this->thisObject=gcnew Object();
}
};

我读过这个

我想我理解指针和引用在 c++/cli 中的工作方式,对吗?

如何在不在父类中创建全局变量并将其实例传递给构造函数的情况下完成此操作?

父类的代码:

void method()
{
    array<Object^>^ thisArr=nullptr;
    verifyDial^ thisDial = gcnew verifyDial(thisArr);
    thisDial->ShowDialog();
    if(thisArr !=nullptr)
       //do sth
    else
        return;
}

这是verfiyDial类:

public ref class verifyDial{

public: array<Object^>^ thisArr;
public: verifyDial(array<Object^>^ arr)
{
      this->thisArr=arr;
}

///////////////////////
void someMethod()////event handler
{
if(/*everything went right*/)
{
this->thisArr=gcnew array<Object^>(2);
this->thisArr[0] = true;
this->thisArr[1] = true;
}
this->Close();
}
4

1 回答 1

0

我不太了解您要做什么,但通常您需要了解实际传递给方法的内容(通过引用或值)。当您定义(和调用)具有简单类型参数的方法时,它通常按值传递(除非您专门定义获取变量地址/引用的方法)。对于复杂的对象/类,对象的地址/引用是按值传递的,但是因为它是引用/地址的值,除非您想销毁(或完全重新创建)实际对象,否则它并不重要。您仍然可以使用对对象的引用值重置所有对象的成员/属性。

只是为了澄清您的意图:您是否正在尝试创建实用程序类来保存各种其他类的“默认”值?

为了我

  Class1 c1 = new Class1();

  Class1 c1 = ...;
  someUtilityClass.resetClassReference(c1);
于 2012-07-30T15:40:37.710 回答