簡體   English   中英

為什么自動實現的屬性必須同時定義 get 和 set 訪問器

[英]Why Automatically implemented properties must define both get and set accessors

當我們定義一個屬性時

    public string Name {get; set;}

dot.net 可以制作我們的屬性代碼。 但是當我們使用

    public string Name {get;}
    public string Name {set;}

我們面對

'Hajloo.SomeThing.PropertyName.set' must declare a body because it is not marked abstract or extern. Automatically implemented properties must define both get and set accessors.

其實為什么編譯器不能判斷屬性並自動生成代碼呢? 有什么問題?

因為自動實現的屬性為屬性值生成自己的后備存儲。 您無權訪問內部商店。

用。實現屬性

  • just get:意味着你只能檢索這些值。 您不能設置屬性值(即使在包含類中)
  • 只是設置:表示您只能設置值。 您無法檢索屬性值。

對於正常的財產

private int _data;
public int Data{  get { return _data } };

這里的父類可以在類中的其他地方執行以下操作(它不能使用自動道具)

_data = 100;

注意:您可以像這樣定義一個auto-prop(這是我最常用的方式)。

public int Data { get; private set;}

這意味着該類的外部客戶端無法設置該屬性。 但是包含類本身可以通過this.Data = x;多次設置屬性this.Data = x; 在類定義中。

如果沒有setter,則該屬性永遠不會具有除默認值之外的任何內容,因此不會用於任何目的。

接收此錯誤的更現代的方案是使用小於VS 2015(或使用小於14的MsBuild)的VisualStudio版本構建使用C#6語法的代碼。

在C#6.0中,允許使用沒有setter的autoProperties(它們被假定為私有集)。

嘗試使用VS2015 +或msbuild 14+編譯..或修改代碼,以便所有autoProperties都有一個setter。

如何在 C# 中為 null 分配默認值

如果 c# 中的值為 null,則將默認值分配給 object [重復] ”此頂部已關閉,表示已被此頂部回答。 但是,我認為此處發布的所有內容都沒有回答該主題,因此我在這里發布(無法在那里發布)對我有用並且我一直在尋找的內容:

decimal default_value = 0.00m;
return (decimal?)json['JSON_KEY'] ?? default_value;

在上面的例子中,我試圖設置一個默認值,以防從 json 中提取小數是 null(就像我們可以在 kotlin 或 swift 中做的那樣)。 Ps:此實現適用於新版本的 .NET 框架。

暫無
暫無

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

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