为什么我不能在setter中输入属性名称而不是“value”关键字?
c#
当我通过value
关键字在 setter 中分配一个值时,它会起作用。但是为什么当我尝试通过属性的名称分配值时它不起作用,该名称应该保持相同的分配值?
在下面的例子中,我value
在 setter 中使用关键字,它工作得很好,我得到了预期的输出 -
private int i = 1;
public int prop
{
get { return i; }
set { i = value }
}
public void Print()
{
Console.WriteLine(i)
}
static void Main ()
{
Program p = new Program();
p.prop = 5;
Console.WriteLine(p.prop); // outputs 5
p.Print(); // outputs 5
}
但是在下面的示例中,我使用属性名称prop
而不是value
关键字,并且它不会将新值分配给i
变量 -
private int i = 1;
public int prop
{
get { return i; }
set { i = prop }
}
public void Print()
{
Console.WriteLine(i)
}
static void Main ()
{
Program p = new Program();
p.prop = 5;
Console.WriteLine(p.prop); // outputs 1
p.Print(); // outputs 1
}
那么区别是什么呢?为什么我不能使用应该保存新值的属性名称而不是value
关键字?
回答
因为它不一样。这个二传手:
public int prop
{
get { return i; }
set { i = prop; } // here
}
将通过在其上方的行调用其 getter 来读取的当前值prop
。该关键字value
专门用于获取要设置的值,您不能将其替换为属性名称,因为这意味着其他含义。
查看文档:
set 访问器类似于返回类型为 void 的方法。它使用一个名为 的隐式参数
value
,其类型是属性的类型。[...]
为属性赋值时,将使用提供新值的参数调用 set 访问器。