2013-07-15 4 views
-1

클래스가 있습니다. 두 개의 인스턴스 멤버 변수 x와 y가 있고이 클래스에는 x와 y라는 두 개의 변수를 다시받는 함수가 있습니다. 인스턴스 변수의 값이 함수 값에 따라 변경되는 이유

public class MyClass 
{ 
    public int x; 
    public int y; 

    public int Add(int x , int y) 
    { 
     return (x + y); 
    } 
} 

는 지금은 클래스의 인스턴스를 생성하고 인스턴스 변수에 값을 할당하고 내가 같은 인스턴스를 사용하여 함수를 호출하면 인스턴스 변수의 값은 내가 통과하고있는 값으로 변경지고 있어요 아래 그림과 같이 함수의 매개 변수로 사용합니다.

 MyClass abs = new MyClass(); 
     abs.x = 10; 
     abs.y = 11; 
     Console.WriteLine(abs.Add(12, 13).ToString()); 

디버깅하는 동안 인스턴스 변수의 값이 각각 12와 13으로 변경되었습니다. 왜 그래야만하지? 정확히 무슨 일이 일어나고 있는지.

+3

다시 확인하십시오. 변경 사항이 표시되지 않습니다. – haim770

답변

5

인스턴스 필드가 변경되지 않았을 것입니다. 대부분 디버거 출력을 잘못 해석했을 가능성이 있습니다. Add 메서드를 사용하는 동안 x 또는 y을 단순히 보면 디버거 (감시 윈도우)에 메서드 매개 변수의 값이 표시됩니다. this.x 또는 this.y을 시청해야합니다.

저는 항상 인스턴스 필드를 밑줄로 시작하는 이유 중 하나이기도합니다.

+0

인스턴스 변수에 커서를 놓으면 디버깅하는 동안 변경된 값이 표시됩니다. – Vikram

+0

Vikram - 변수가 동일한 이름을 나타냅니다. 범위가 – Sayse

+1

@Vikram 마우스 오버 툴팁은 범위 지정을 고려하지 않습니다. 마우스 커서 아래에있는 이름을 가진 변수가 감시 윈도우처럼 현재 범위에있는 값을 표시합니다. – cremor

3

음은 변경하지 않아야하고 확인하는 가장 좋은 방법은 너무

Console.WriteLine(abs.Add(12, 13).ToString()); // output 25 
Console.WriteLine(abs.x + abs.y); // output 21 

하면 자세한 내용 Variable names should not match field names

+0

+1 링크 (IMO는 두 개의 광고 문안이별로 도움이되지 않지만 내가 왜 추가했는지 알 수 있습니다.) – Sayse

1
를 들어 this.x

를 사용하는 데 필요한 필드의 값을 확인하려면이 추가 될 것이다

디버거는 중단 점이있는 범위의 x 값을 표시합니다. 멤버 선언을 마우스로 가리켜도 변수 값을 표시 할 필요는 없습니다. 감시보기에서 this.x을 확인하십시오.

관련 문제