通过将对象传递给类构造函数来修改其他类中的对象

时间:2012-07-30 15:16:20

标签: .net pointers reference constructor c++-cli

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

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();
}
};

我已阅读this

我认为我理解指针和引用在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();
}

1 个答案:

答案 0 :(得分:0)

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

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

对我来说

  Class1 c1 = new Class1();

更清晰,更容易理解
  Class1 c1 = ...;
  someUtilityClass.resetClassReference(c1);