关于封装:属性

时间:2016-02-05 14:53:36

标签: c# encapsulation console.writeline

案例I:

class example
{
   private int roll;
   public int Roll
   {
       get { 
           return roll; 
       }
       set{
           if (value > 0)
           { roll = value; }   
       }
   }
   //public example()
   //{
   //    roll = 500;
   //}

}

class practice_4
{
    static void Main(string[] args)
    {
        example ABC = new example();
        Console.WriteLine(ABC.Roll = -1);
        Console.ReadLine();

    }
}

输出:-1

我设置了一个不包含任何非法值的业务逻辑,默认值为" 0" ..

案例II:

class example
{
   private byte roll;
   public byte Roll
   {
       get { 
           return roll; 
       }
       set{
           if (value > 0)
           { roll = value; }   
       }
   }
   //public example()
   //{
   //    roll = 500;
   //}

}

class practice_4
{
    static void Main(string[] args)
    {
        example ABC = new example();
        Console.WriteLine(ABC.Roll = -1);
        Console.ReadLine();

    }
}

上面的代码显示编译时错误,因为我只是将valuetype Int更改为byte

错误:常量值-1无法转换为字节...

什么是Console.WriteLine方法呢?

2 个答案:

答案 0 :(得分:1)

这是因为在这种情况下,assigment表达式返回正在分配的值-1。它不返回ABC.Roll,您可以通过在赋值后输出属性值来验证:

Console.WriteLine(ABC.Roll = -1); //-1
Console.WriteLine(ABC.Roll); //0

因此ABC.Roll实际上永远不会改变setter方法中验证逻辑的原因。

答案 1 :(得分:1)

赋值具有返回值(指定值)。所以,即使你没有存储-1,它仍然是作业本身的返回值。

这将打印0

ABC.Roll = -1;
Console.WriteLine(ABC.Roll);