2016-07-23 1 views
-3

나는 한 가지 오류가있어 내 책에서 답변을 검색하고이 특정 주제에 대한 자습서를 보았습니다. 큰 차이는 재산이없는 동안 당신의 ObjectCount() 방법은 static 방법이다왜 내가 이해할 수 없는지 CS0120

class Program 
    { 
     private static Point another; 
     static void Main(string[] args) 
     { 
      Point origin = new Point(1366, 768); 
      Point bottomRight = another; 
      double distance = origin.DistanceTo(bottomRight); 
      Console.WriteLine("Distance is: {0}", distance); 
      Console.WriteLine("Number of Point objects: {0}", Point.ObjectCount()); 
     } 
    } 
class Point { 
    private int x, y; 
     private int objectCount = 0; 
     public Point() 
     { 
      this.x = -1; 
      this.y = -1; 
      objectCount++; 
     } 
     public Point(int x, int y) 
     { 
      this.x = x; 
      this.y = y; 
      objectCount++; 
     } 
     public double DistanceTo(Point other) 
     { 
      int xDiff = this.x - other.x; 
      int yDiff = this.y - other.y; 
      double distance = Math.Sqrt((xDiff * xDiff) + (yDiff * yDiff)); 
      return distance; 
     } 
     public static int ObjectCount() 
     { 
      **return objectCount;** 
     } 
    } 
+0

커뮤니티에 오신걸 환영합니다. 다른 사람들에게 도움을 받으려면 좋은 질문을 게시해야합니다. 코드에서 불필요한 부분을 제거하고 단순화하십시오. 물론 대신 공백을 넣지 마십시오. 다른 사람들이 문제에 시간을 보내길 원한다면 먼저 관심을 갖고 시간을 보내야합니다 –

답변

3

Point라고 추가 된 다른 클래스를 표시하는 것입니다.

public static int ObjectCount() 

코드에 할당되지 않은 속성에서 읽는 중입니다. 따라서 메소드 서명에서 정적 키워드를 제거하십시오.

public int ObjectCount() 
{ 
    return objectCount; 
} 
0

1) 전체 코드를 별도의 블록에 게시하십시오. 또한 정확하게 오류가있는 곳을 사람들에게 알려주십시오.

2) CS0120 오류는 줄에서 오는 것 같습니다. Console.WriteLine ("Number of Point objects : {0}", Point.ObjectCount());

다시 한번 생각해 보면, 생성 된 모든 Point 개체를 계산할 것입니다. 당신의 실수는 objectCount를 인스턴스 멤버로 만드는 것입니다.

Point 클래스의 모든 인스턴스는 자체 objectCount를 가지며 생성자가 완료되면 항상 1입니다. ObjectCount가 정적 멤버가 아니기 때문에 Point.ObjectCount()를 호출하고 objectCount를 반환 할 수없는 것과 같은 이유 때문에 인스턴스에 바인딩됩니다.

코드를 수정하려면 objectCount를 정적으로 만드십시오. 이렇게하면 Point의 모든 인스턴스에 대해 하나의 objectCount 만있을 것입니다.

관련 문제