关于封装:属性

About Encapsulation : properties

案例一:

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”..

案例二:

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方法真的有用吗?

这是因为赋值表达式 return 是被赋值的值,在本例中为 -1。它不是 return ABC.Roll,您可以通过在赋值后输出 属性 值来验证:

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

所以 ABC.Roll 实际上从未改变 setter 方法中验证逻辑的原因。

一项分配有一个 return 值(分配的值)。因此,即使您没有存储 -1,它仍然是赋值本身的 return 值。

这将打印 0:

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