2013-11-04 1 views
1

저는 C#의 초보자입니다. 속성에 대해 읽었습니다. 나는이 코드를 가지고 있고 그 결과가 "Value to big"으로 표시되어야한다고 생각하지만 아무것도 표시하지 않는다. 내가 틀렸다고 말해주십시오. 덕분에 .C#의 속성이 올바른 결과를 표시하지 않습니다.

 private int _age; 

     public int Age 
     { 
      get { return _age; } 
      set 
      { 
       if (value < 10) 
       { 
        Age = value; 
        Console.WriteLine("Value to Small"); 
       } 
       else 
       { 
        Console.WriteLine("Value to Big"); 
       } 
      } 
     } 

     private static void Main(string[] args) 
     { 
      var banmeet = new Program(); 
      banmeet._age = 22; 
      Console.ReadLine(); 
     } 
    } 
} 
+1

당신은 개인 백업 필드와 공용 속성 [여기] (http://msdn.microsoft.com/en-us/library/ms173118.aspx) – Harrison

답변

2

당신은 Age 대신 _age 설정해야합니다. _age은 개인 회원으로, 여기서는 Age으로 설정하려는 속성입니다.

banmeet.Age = 22; 

또한 팀 자비스는 연령 세터의 내부에, 당신은 _age에 나이를 설정해야합니다 지적했다.

if (value < 10) 
{ 
    _age = value; 
    Console.WriteLine("Value to Small"); 
} 

속성 대 필드 here에 대해 자세히 읽을 수 있습니다.

+2

플러스, 세터, 당신은 설정해야합니다 대해 읽어야 _age = value (나이가 아님) –

+0

고마워하지만 제발 내가 틀렸어 만 사적인 변수에 들어가는 값이 아니거나 속성에 설정되어있는 경우에 제게 정정 해주세요. –

+0

새로운 객체 인'var banmeet = new Class();'를 만들면 private이기 때문에'_age'에 접근 할 수 없습니다. 'Age' 속성을 만들 때'Age' 자체에 값이 없으므로'_age' 변수를 반환하고 설정해야합니다. – matth

0

필드가 아닌 속성 인 _age를 설정하고 있습니다. 그래서 당신의 부동산 세터는 부름을받지 않을 것입니다.

또한 속성 설정자에 Age를 설정하지 말고 _age를 설정해야합니다. Age를 설정하면 setter가 자체 호출 이후 무한 재귀 (궁극적으로 스택 오버플로)가 발생합니다.

1

몇 가지 실수가 있습니다. 첫째로 당신은이 코드를 사용하려면 :

다음
private int _age; 

    public int Age 
    { 
     get { return _age; } 
     set 
     { 
      if (_age < 10) 
      { 
       _age = value; 
       Console.WriteLine("Value to Small"); 
      } 
      else 
      { 
       Console.WriteLine("Value to Big"); 
      } 
     } 
    } 

    private static void Main(string[] args) 
    { 
     var banmeet = new Program(); 
     banmeet.Age = 22; 
     Console.ReadLine(); 
    } 

_age 당신이 사용해야 올바른 결과를 들어 0

때문에 코드 출력 위의 사용은 작은-값 인 경우 :

private int _age; 

     public int Age 
     { 
      get { return _age; } 
      set 
      { 
       _age = value; 

       Console.WriteLine(_age < 10 ? "Value to Small" : "Value to Big"); 
      } 
     } 

     private static void Main(string[] args) 
     { 
      var banmeet = new Program(); 
      banmeet.Age = 22; 
      Console.ReadLine(); 
     } 
0

캡슐화은 '물리적 또는 논리적 패키지 내에 하나 이상의 항목을 포함하는 프로세스'로 정의됩니다. 캡슐화는 객체 지향 프로그래밍 방법론에서 구현 세부 사항에 대한 액세스를 차단합니다. 연령 대신 _age의 값을 설정하는 것이 좋습니다.

public int Age 
    { 
     get { return _age; } 
     set 
     { 
      if (value < 10) 
      { 
       _age = value; 
       Console.WriteLine("Value to Small"); 
      } 
      else 
      { 
       Console.WriteLine("Value to Big"); 
      } 
     } 
    } 
관련 문제