为什么我不能在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 访问器。


以上是为什么我不能在setter中输入属性名称而不是“value”关键字?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>