2012-03-01 10 views
3

私はその後、私はこれを実行すると、私は私の質問output.soに5を見つけなぜクラスメンバー変数の値が変わるのですか?それがない理由

static void Main(string[] args) 
    { 
     ABC objabc = new ABC(); 
     objabc.a = 15; 
     objabc.valueA(objabc); 
     Console.WriteLine(objabc.a); 
    } 

としてメイン書くクラスに

class ABC 
    { 
      public int a = 2; 
      public void valueA(ABC objabc) 
      { 
       a = 5; 
       objabc = new ABC(); 
       objabc.a = 11; 
      } 
    } 

を持っているが、その理由= 5 ??です2,11または15?

+3

は、この宿題ですか? –

+0

私が理解しない何をしvalueA方法で未使用のABCオブジェクトを作成している理由であります – jzworkman

+0

なぜ落札ですか? –

答えて

5

オブジェクトobjabcに対してvalueAメソッドを呼び出しています。だから、あなたはこのオブジェクトがあること5にメソッドを呼び出した上でオブジェクトのメンバを設定している

class ABC 
{ 
     public int a = 2; 
     public void valueA(ABC objabc) 
     { 
      this.a = 5; 
      objabc = new ABC(); 
      objabc.a = 11; 
     } 
} 

:メソッド内thisのメンバーaが5に設定されているあなたはと同等のようなコードを見ることができますobjabcからmainまでですので、最終的な値は5です。後で新しいオブジェクト参照を割り当てるということは、参照によって渡されていないため変更が外部に表示されないため違いはありません。

コードがこのされた場合、結果は(すなわち、11)は異なるであろう。

class ABC 
{ 
     public int a = 2; 
     public void valueA(ref ABC objabc) 
     { 
      a = 5; 
      objabc = new ABC(); 
      objabc.a = 11; 
     } 
} 

この場合、パラメータは参照によって渡されるので、割り当てobjabc = new ABC();は、(呼び出し元のコードに見えるであろうすなわちMain)。

+0

Thnx tudor ....あなたの2番目の例は、最初と2番目の違いを調べるのに役立ちます.thnx .. – Usman

0

まず、ABCというインスタンスを作成します。これにより、aの値が2に設定されます。フィールドを直接使用してaの値を15に設定します。次に、非常に同じフィールドを5に設定するメソッドを呼び出して、aの値を11に設定した別のインスタンスを作成します。この他のインスタンスは、最初のインスタンスには影響しません。

0
static void Main(string[] args) 
{ 
    ABC objabc = new ABC(); // Value of a is 2 
    objabc.a = 15; // Set it to 15 
    objabc.valueA(objabc); // This resets it to 5, then creates a new object and sets it to 11 
    Console.WriteLine(objabc.a); // You're still calling a on the old object, not the new one 
} 
0

クラスは参照型です。 パラメータ "ABC objabc"として渡すと、新しいobjabcが作成されます。何も返さないので、メソッドを終了すると消えます。 したがって、次の操作を実行できます。 - オブジェクトを返し、このオブジェクトを印刷します。 公開ABC値A(ABC objabc); - objabcの前にキーワード "ref"を渡して、以前に作成したクラスへの参照を保持します(IE:public void valueA(ref ABC objabc))

しかし、同じクラスに奇妙な質問ですね。

幸運!

http://msdn.microsoft.com/en-us/library/ms173109.aspx

関連する問題