簡體   English   中英

用於屬性的 getter 和 setter 的 Lambda

[英]Lambda for getter and setter of property

在 C# 6.0 中,我可以這樣寫:

public int Prop => 777;

但我想使用 getter 和 setter。 有沒有辦法做一些下一個?

public int Prop {
   get => propVar;
   set => propVar = value;
}

首先,這不是 lambda,盡管語法相似。

它被稱為“ 表達式體成員”。 它們與 lambda 相似,但仍然有根本的不同。 顯然,它們不能像 lambda 那樣捕獲局部變量。 此外,與 lambda 不同,它們可以通過它們的名稱訪問:) 如果您嘗試將表達式主體屬性作為委托傳遞,您可能會更好地理解這一點。

C# 6.0 中沒有 setter 的這種語法,但C# 7.0 引入了它

private int _x;
public int X
{
    get => _x;
    set => _x = value;
}

C# 7支持 setter,以及其他成員:

更多表情體成員

表達式主體的方法、屬性等在 C# 6.0 中很受歡迎,但我們不允許在所有類型的成員中使用它們。 C# 7.0 將訪問器、構造器和終結器添加到可以具有表達式主體的事物列表中:

 class Person { private static ConcurrentDictionary<int, string> names = new ConcurrentDictionary<int, string>(); private int id = GetId(); public Person(string name) => names.TryAdd(id, name); // constructors ~Person() => names.TryRemove(id, out _); // finalizers public string Name { get => names[id]; // getters set => names[id] = value; // setters } }

沒有這樣的語法,但舊的語法非常相似:

    private int propVar;
    public int Prop 
    {
        get { return propVar; }
        set { propVar = value; }
    }

或者

public int Prop { get; set; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM