【问题标题】:Property init in C#C# 中的属性初始化
【发布时间】:2014-04-28 14:15:19
【问题描述】:

我在很多情况下都习惯写一个像这样的属性

public string Data {get; private set; }

通常我在构造函数中初始化它们 我怎样才能给数据一些价值,而不是明确地使用构造函数

【问题讨论】:

  • 你要问自己,为什么还要使用auto-properties。答案是,不要使用它们,而是使用普通属性(通常是公开私有字段)。

标签: c# .net properties


【解决方案1】:

使用支持字段代替自动实现的属性,用相同的值初始化该字段,然后通过如下属性公开它:

private string _Data = "Some Value";

public string Data
{
    get { return _Data; }
    private set { _Data = value; } //or remove it
}

【讨论】:

  • 我想保持私密
  • @Yakov,将其标记为私有或将其全部删除。
  • @Selman22,除了在构造函数中,不能为自动实现的属性分配默认值。但是可以为字段分配默认值。因此,对普通属性使用显式字段可以达到相同的目标。
【解决方案2】:

你可以使用一个支持变量

private string _data = "foo";
public string Data {get {return _data;} private set {_data = value;}}

或者在 C#6 中你可以这样写

public string Data {get; private set; } = "foo";

【讨论】:

    【解决方案3】:

    不具有自动属性。如果你有一个支持字段,你可以初始化它:

    private string _Data = "some value";
    public string Data {get {return _Data;} private set {_Data = value;} }
    

    【讨论】:

      【解决方案4】:

      C# 9.0 将为这个特定问题提供新的init 访问器:

      public class DataClass
      {
          public string Data {get; init; }
      }
      

      现在您可以为 DataClass 使用对象初始化器而不是构造器:

      var d = new DataClass { Data = "newValue" };
      

      更多详情here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-11
        • 1970-01-01
        • 1970-01-01
        • 2019-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多