假设我们有以下代码:
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”时出现“ =”,那不是只是修改名称而什么都不返回吗?
答案 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”并返回其值。对于吸气剂来说,这不是一个很好的模式。