2016-12-23 16 views
13

trường hợp của tôi:Tại sao tôi không thể gán cho một thuộc tính chỉ đọc cú pháp lambda trong hàm tạo?

public class A 
{ 
    public string _prop { get; } 
    public A(string prop) 
    { 
     _prop = prop; // allowed 
    } 
} 

Một trường hợp khác:

public class A 
{ 
    public string _prop => string.Empty; 
    public A(string prop) 
    { 
     // Property or indexer 'A._prop' cannot be assigned to -- it is read only 
     _prop = prop; 
    } 
} 

Cả hai cú pháp:

public string _prop { get; } 

public string _prop => string.Empty; 

tạo ra một chỉ đọc tài sản. Nhưng tại sao tôi không chỉ định nó trong trường hợp thứ hai?

+0

Ngoài ra còn có 'chuỗi công khai Prop {get; } = string.Empty; 'để khởi tạo các thuộc tính tự động chỉ đọc. –

+0

Cuối cùng, tôi đã viết một bài báo: http://blog.rogatnev.net/2017/09/13/Varieties-of-properties.html – Backs

Trả lời

15
public string _prop => string.Empty; 

bằng:

public string _prop { get { return string.Empty; } } 

Vì vậy, string.Empty cũng giống như phương pháp mã trong phương pháp get.

public string _prop { get; } 

bằng:

private readonly string get_prop; 
public string _prop { get { return get_prop;} } 

Vì vậy, bạn có thể gán get_prop một giá trị từ constructor;

Thông tin khác trong the article.

+0

Rất cám ơn! :) –

+0

@ TânNguyễn vui mừng được giúp đỡ! – Backs

Các vấn đề liên quan