2016-07-31 10 views
4

として更新されていないのはなぜは30ですが、例外が、私はobj.Age = 25出力を更新しています、私は後ろに何が起こっているかのアイデアを取得していない午前25私は私の<code>obj</code><code>null</code>として、その出力を更新していた場合、オブジェクトがNULL

ではありませんシーン。 誰かがこれがなぜ起こっているのか説明できますか?

public class A 
{ 
    public int age; 
} 

class Program 
{ 
    public static void Test(A obj) 
    { 
     //obj = null; 
     //obj.age = 25; 
    } 

    static void Main(string[] args) 
    { 
     try 
     { 
      A obj = new A(); 
      obj.age = 30; 
      Test(obj); 
      Console.WriteLine(obj.age); 
     } 
     catch (Exception) 
     { 
      throw; 
     } 
    } 
} 

答えて

2

Noticeをメソッドのシグネチャをこのpageページ以降を読んで見つけることができます。参照型がパラメータとして渡された場合、refとして指定されません。オブジェクト内のプロパティ値を変更することはできますが、オブジェクトを別のメモリ位置を指すように割り当てることはできません。

簡単な言葉であなたが行うことはできません -

public static void Test(ref A obj) 
- obj = null OR obj = new A() OR

obj = instanceOfAnotherObjectをしても、オブジェクトを変更できるようにするには、メソッドのシグネチャを変更するとrefでobjを渡す必要があります

2

あなたがobj = null;を行うと、あなたがnullにオブジェクトが、nullに、そのオブジェクトへの参照を設定しないでください。あなたのメソッドのように、Testパラメータは渡されたオブジェクトへの新しい参照です。objの参照はMainには影響しません。したがってobjからnullTestに設定してもその方法で効果があります。
は/やるあなたがそう

public static void Test(ref A obj) 

ようrefパラメータにTestのパラメータを変更して、あなたが実際に修正するようになりましたので、

... 
A obj = new A(); 
obj.age = 30; 
Test(ref obj); 
... 

ようTestを呼び出したいことがしたいかを確認しますobjMainの方法の参照。あなたが表示されますコンソールにageを書くとき、あなたはそうするMainポイントにobjと同じオブジェクトを変更し、(その前にnullobjを設定せずに、もちろん)obj.age = 25;Testで行う


25.
参照によって渡された可能性があります。Aをたとえばintを入力し、その値をTestに変更すると、整数が値渡しとしてMainの出力に反映されません。

public static void Test(A obj) 

パラメータがrefとして渡されていません - あなたはそれ役立つ

関連する問題

 関連する問題