案例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方法呢?
答案 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);