2013-11-04 31 views
1

我是c#的新手。 我正在閱讀有關房產。 我已經編碼這個,我認爲結果應該顯示「價值大」,但它沒有顯示任何東西。 請告訴我我在哪裏錯了。 謝謝。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 =值(不是年齡) –

+0

謝謝,但請糾正我,如果我錯了,但不是在私人變量內的值或他們設置屬性? –

+0

當你創建一個新的對象'var banmeet = new Class();'時,你將無法訪問'_age',因爲它是私有的。當你創建'Age'屬性時,你必須返回並設置'_age'變量,因爲'Age'本身不包含一個值。 – matth

0

您正在設置_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而不是Age的值。

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