DOBON.NET DOBON.NETプログラミング掲示板過去ログ

クラスの仕組みについて

環境/言語:[Visual C# .NET]
分類:[.NET]

クラスのインスタンスを、メソッドに渡して、そのメソッドで渡されたインスタンスをいじると、元のインスタンスも変更されるのでしょうか?
つまり、

public void YobidasareruMethod(XmlNode val)
{
val.Value = "hogehoge";
}

というメソッドがあるとして、
public void YobidasimotoMethod()
{
XmlDocument doc = new XmlDocument(9;
doc.Load("hogehoge.xml");
XmlNode node = doc.DocumentElement.FirstChild;
this.Methos(node);
//ここでnodeのValueは変更されているのか?
  //それとも、nodeのほうには影響はないのか?
}

ということです。
> クラスのインスタンスを、メソッドに渡して、そのメソッドで渡されたインスタンスをいじると、元のインスタンスも変更されるのでしょうか?
> つまり、

基本的にclassで宣言されたもののインスタンスはマネージヒープに確保
されます。そして、それを参照する変数にはそのインスタンスの
ハンドル(インスタンスの先頭ポインタではない)が入っています。
引数を値渡し(refを付けないで)で渡す場合、参照型の場合そのハンドル
が相手方に渡ります。従って、呼び出されるメソッドは自分の中で、
先のハンドルを利用して、ヒープ上のインスタンスを操作することができます。
■No6767に返信(antさんの記事)
>>クラスのインスタンスを、メソッドに渡して、そのメソッドで渡されたインスタンスをいじると、元のインスタンスも変更されるのでしょうか?
>>つまり、
>
> 基本的にclassで宣言されたもののインスタンスはマネージヒープに確保
> されます。そして、それを参照する変数にはそのインスタンスの
> ハンドル(インスタンスの先頭ポインタではない)が入っています。
> 引数を値渡し(refを付けないで)で渡す場合、参照型の場合そのハンドル
> が相手方に渡ります。従って、呼び出されるメソッドは自分の中で、
> 先のハンドルを利用して、ヒープ上のインスタンスを操作することができます。
>

すいません、いかんせん初心者なもので、まだよく理解できないのです。
結局、変更されるのでしょうか?それとも、されないのでしょうか?
せっかく詳しい回答してくださったのに、本当にすみません。
ま、普通のオブジェクト指向だったら、
クラスをインスタンス化したのを扱うんじゃなくて、クラスをインスタンス化したオブジェクトへの参照値を扱う(Object型とか?)んだろうな。
つまり、public void YobidasareruMethod(XmlNode val)のvalはXmlNodeクラスのインスタンスを示すものであって、インスタンスそのものじゃない。
ま、アドレス渡しているみたいなものと考えて差し支えないかと。
そしてantさんはこういう感じのことを言いたかったのではないかと、憶測してみる。
あとは自分で調べ上げてください。
■No6771に返信(もにゅさんの記事)
> ま、普通のオブジェクト指向だったら、
> クラスをインスタンス化したのを扱うんじゃなくて、クラスをインスタンス化したオブジェクトへの参照値を扱う(Object型とか?)んだろうな。
> つまり、public void YobidasareruMethod(XmlNode val)のvalはXmlNodeクラスのインスタンスを示すものであって、インスタンスそのものじゃない。
> ま、アドレス渡しているみたいなものと考えて差し支えないかと。
> そしてantさんはこういう感じのことを言いたかったのではないかと、憶測してみる。
> あとは自分で調べ上げてください。

みなさんどうもありがとうございました。参考になりました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板