オブジェクトを変更するためにオブジェクトを別のクラスに渡したいのですが、オブジェクトに加えた変更を、オブジェクトが取得されたクラス インスタンス内のこのオブジェクトに反映させたいと考えています。これは、次のコードで機能するはずです。
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();
}