2013-11-04 32 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"); 
      } 
     } 
    }