2012-03-01 2 views
3

내가왜 클래스 멤버 변수의 값이 변경됩니까?

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

그때 내가

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

내가 output.so 내 질문에 5 발견이를 실행하면 같은 주요 쓰기 클래스를 가지고는있는이 5 ?? 아니다 = 왜 이유 2, 11 또는 15 ??

+3

이, 이런 숙제는? –

+0

이해는 valueA 방법에 미사용 ABC 객체를 작성하는 이유는 그나마 무엇 – jzworkman

+0

왜 아래 표를합니까? –

답변

5

개체 objabcvalueA 메서드를 호출하고 있습니다.

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

그래서 당신은 당신이있는 5이 객체에 메소드를 호출하는 개체의 멤버를 설정하는 : 방법 내부 thisa가 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 .... 두 번째 예제는 첫 번째와 두 번째 차이점을 찾는데 도움이됩니다 ..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

관련 문제