【问题标题】:Purpose of property with empty set get具有空集的属性的用途
【发布时间】:2017-04-26 18:20:39
【问题描述】:

有人能告诉我,为私有类成员使用公共属性但没有在集合中实现任何东西并获取部分的目的是什么?我知道这可能只是为了举例,以后你可以实现一些东西,但我不知道这样使用它是否有任何意义

【问题讨论】:

  • 这可能是一个自动实现的属性。取决于你所说的空是什么意思,是VB还是C#
  • 你指的是自动属性吗?即, public int Foo { get;设置;}
  • @MichalHainc 我不认为这是该问题的重复。仔细阅读他的问题,看看我的回答。
  • @MichalHainc 感谢您想清除所有重复的问题,但我对找到的答案不满意,抱歉没有阅读所有内容

标签: c# .net vb.net oop properties


【解决方案1】:

这是 C# 中的“自动实现”属性。实际上,该属性充当完整属性,即:

这个:

public int Number { get; set; }

相当于:

private int _number;

public int Number
{
    get
    {
        return this._number;
    }
    set
    {
        this._number = value;
    }
}

这使您不必输入完整的属性声明。当您在 getter 和/或 setter 中没有任何其他逻辑时,这很有用。

如果您要创建简单的数据映射和传输类,自动实现属性可以使类定义更加简洁。

【讨论】:

    【解决方案2】:

    我假设您知道有一个由 C# 编译器生成的私有字段作为支持此属性的字段。它是语法糖。我还将假设您知道这是一个自动实现的属性。那么如果一个属性在getset 中没有逻辑,那么它的意义何在。换句话说,任何类都可以访问它并设置它的值。那么为什么选择这个属性而不是公共领域呢?

    目的是:

    1. 今天getset 是空的,但将来可能需要代码。为避免将来违反合同,请使用空的 getset
    2. 大多数 .NET 数据绑定可以针对属性而不是字段来完成。因此,尽管它是空的,但它仍然有更大的用途。
    3. getset 可以有访问修饰符。例如,您可以说 set 是私有的,而 get 是公开的。
    4. 字段不能在接口中使用,但属性可以。

    【讨论】:

      【解决方案3】:

      当你看到

      public int Count { get; set; }
      

      作为一个类的成员,那不是什么都不是。您只是在遵循自动属性的默认实现。差不多吧,

      private int _count; 
      
      public int get__Count() 
      {
          return _count;
      }
      
      public void set__Count(int value) 
      {
          _count = value;
      }
      

      您只需在 C# 中使用语法糖就可以大致像使用字段一样使用这些方法,即

      instanceOfObject.Count = 42; // Not a field access, but behind the scenes a method call.
      

      【讨论】:

      • @MichalHainc 这是一个中肯的意见。如果您认为我的回答没有用或对 Stack Overflow 没有贡献,欢迎您投反对票。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      相关资源
      最近更新 更多