2017-02-28 9 views
-5

클래스의 변수를 선언 할 샘플 코드가 있지만 메서드에서 사용하면 값이 0이됩니다. 자세한 내용은 아래 코드를 참조하십시오. 당신이 변수 값을 초기화하지 않았다 beacuse클래스에서 선언 된 변수를 초기화하는 방법

디스플레이 방법 내부
class RectangleExample 
{ 
    double i; 
    double j; 

    public void GetValues() 
    { 
     i = 2.5; 
     j = 3.5; 
    } 

    public double GetArea() 
    { 
     return i * j; 
    } 

    public void Display() 
    { 
     Console.WriteLine("Length: {0}", i); 
     Console.WriteLine("width: {0}", j); 
     Console.WriteLine("Area: {0}", GetArea()); 
    } 
} 

class ExecuteRectangle 
{ 
    static void Main(string[] args) 
    { 
     RectangleExample obj1 = new RectangleExample(); 
     obj1.Display(); 
     Console.ReadKey(); 
    } 
} 
+1

공유 코드. –

+1

* "아래 코드를 찾으십시오."* 찾을 수 없습니다 ... 어디에서 숨기셨습니까? –

+2

생성자에 대해 들었습니까? :) – C1sc0

답변

-1

시도 시도 get/set 속성을 사용하면 수업 전반의 변수 및 해당 변수의 외부 변수에 대한 모든 액세스 권한을 얻을 수 있습니다.

나는이 문제를 해결하기 위해 더 나은 방법이 있다는 것을 확신하지만,이 내가 무슨 생각입니다 :

class RectangleExample 
{ 
    public double i{get;set;}=0; 
    public double j{get;set;}=0; 
... 
... 
... 
} 
+2

잘못되었습니다. OP가 무엇을 잘못했는지는 설명하지 않습니다. – pinkfloydx33

+0

@ pinkfloydx33 그것은 분명히 그를 위해 일했습니다. 나는 왜 "곧"설명 할 수있는 대답을 업데이트 할 것이다. – Joel

+0

만약 * all *이 필드를 프로퍼티로 변환했다면 어떻게 가능할 지 모르겠다. – pinkfloydx33

0

, 널 (null) 값을 받고 처음 Console.WriteLine

전에 GetValues 메소드를 호출이며, 값이 GetValues 방법에 초기화됩니다 당신은 didn를 코드의 아무 곳에 나 호출하지 마십시오.

5

GetValues() 메서드를 호출하지 않으므로 i 또는 j에 값이 할당되지 않습니다. double의 기본값은 0입니다.

Display()으로 전화하기 전에 GetValues()으로 전화해야합니다.

class ExecuteRectangle 
{ 
    static void Main(string[] args) 
    { 
     RectangleExample obj1 = new RectangleExample(); 
     obj1.GetValues(); // <-- HERE 
     obj1.Display(); 
     Console.ReadKey(); 
    } 
} 

앞에서 언급 한 것처럼 대신 생성자에 값을 할당하십시오. Thomas Schremser으로

public RectangleExample() 
{ 
    i = 2.5; 
    j = 3.5; 
} 

는 현명하게 의견 이름 "는 GetValues"이 방법은 아마도 "SetValues" 아무것도 얻을하지 않는 경우 나쁜 관행이 적어도 약간 더 지적한다.

0

모든 클래스는 constructor입니다. class이 생성 될 때마다 Contructor이 호출 중입니다. 개체에 constructor을 제공하지 않으면 C#은 기본적으로 개체를 인스턴스화하고 구성원 변수를 기본값으로 설정하는 인스턴스를 만듭니다.

코드가없는 constructor 그래서 당신의 재산 (i,j) 설정 기본값 (0) 호출 할 수 GetValues 방법 Display 전에 방법이 있거나 내 샘플을 사용할 수 있습니다. 변수에게 public 속성을 부여

을 (위 이상 C# 3.5에서 작업한다고 가정) 뿐만 아니라 설정 :

그래서 다음과 같이 getter 및 setter를 추가이

class RectangleExample 
{ 
    double i ; 
    double j ; 

    // class will be created calling `contructor`. Constructor will be call GetValues or set i , j values for my answer. 
    RectangleExample() 
    { 
    //i = 2.5; 
    //j = 3.5; 
    GetValues(); 
    //or 
    i = 2.5; 
    j = 3.5; 
    //GetValues(); 
    } 
    public void GetValues() 
    { 
     i = 2.5; 
     j = 3.5; 
    } 

    public double GetArea() 
    { 
     return i * j; 
    } 

    public void Display() 
    { 

     Console.WriteLine("Length: {0}", i); 
     Console.WriteLine("width: {0}", j); 
     Console.WriteLine("Area: {0}", GetArea()); 

    } 
}