lambda实现的属性同时具有getter和setter吗?

时间:2019-07-12 07:50:54

标签: c# lambda

假设我们有以下代码:

class Person
{
   public string firstname = "Unknown";
   public string Name => firstname = "John";
}     
Person p = new Person();
Console.WriteLine(p.Name); 

所以输出是

  

“约翰”

我有点困惑,并且有一些问题:

Q1-Name属性是否充当设置者和获取者?

Q2-我没有要求它返回任何东西,例如,尽管lambda表达式只能返回不带“ =”的sth

p => p.name

其中没有“ =”,因此返回p.name 如果p => p.name =“ john”时出现“ =”,那不是只是修改名称而什么都不返回吗?

2 个答案:

答案 0 :(得分:3)

lambda只是委托。委托是任何带有或不带有参数以及带有不带返回类型的任意方法。因此,您的操作可能会也可能不会返回某些结果。

在您的情况下,firstName = John 返回某些结果,即赋值的结果,即赋值。您的情况将返回"John"

您的代码等效于以下内容,我可以更好地说明这一点:

class Person
{
    public string firstname = "Unknown";
    public string Name { get { return firstname = "John"; } }
}

要获取和设置属性,您需要两个lambda-实际上是两个方法-即get-和set-method:

public string Name
{
    get => /* any code that expects nothing and returns a string */
    set => /* any code that expects a string and does not return anything */
}

您只有一个-get-method-使您的媒体资源变为get-only。但是,该方法具有副作用,该方法会修改另一个成员-firstname,这可能导致高度混乱,因此应避免使用。

答案 1 :(得分:0)

在这种情况下,属性名称是只读的。赋值运算符的返回值等于所赋值。如果您编写类似这样的内容:

Console.WriteLine(somevariable = "Test");

您将在控制台中看到“测试”,因为赋值运算符的结果等于赋值。

换句话说-您的属性是只读的,但是在每次调用时,它都会在名字上写“ John”并返回其值。对于吸气剂来说,这不是一个很好的模式。

相关问题