当我通过 setter 中分配一个值时value
关键字,它有效。但是,为什么当我尝试通过属性名称分配值时它不起作用,该属性应该保存相同的分配值?
在下面的例子中,我使用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
}
将阅读current的价值prop
通过在其上方的行调用其 getter 方法。关键词value
专门用于获取要设置的值,您不能将其交换为属性名称,因为这意味着其他含义。
See the docs https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/using-properties#the-set-accessor:
set 访问器类似于返回类型为 void 的方法。它使用一个名为的隐式参数value
,其类型是属性的类型。
[...]
当您为属性分配值时,将使用提供新值的参数来调用 set 访问器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)