【问题标题】:C# - Advantages for using properties v. fields [duplicate]C# - 使用属性与字段的优势 [重复]
【发布时间】:2013-02-01 17:13:09
【问题描述】:

可能重复:
What is the difference between a field and a property in C#?
Difference between Property and Field in C# .NET 3.5+

前段时间,我继承了一个 C# Web 应用程序,其中大多数可能是字段的类成员都以以下两种方式之一定义为属性:

private Guid id;
public Guid Id
{
  get { return id; }
  set { id = value; }
}

public int someValue{ get; set; }

也就是说,getter/setter 除了将值传送到私有字段或从私有字段传送值之外,不做任何事情。在这些情况下,将这些成员构建为属性与字段是否有优势[或理由]?反之亦然?

将它们更改为字段是否会违反任何潜规则或最佳实践?是否存在显着的性能差异 - 例如,以一种或另一种方式为 N 个对象的列表增加 someValue? (我目前的理解是,字段访问必然不那么复杂[和高效]。)

【问题讨论】:

  • 因为这个问题没有真正的答案,所以这里不应该成为一个问题。但是想法是,如果您需要进行某种验证,该属性可以在 getter 和 setter 中轻松实现。一个领域没有那种灵活性。
  • 已有许多关于属性与字段优点的讨论 - 这是另一个Properties vs. Fields: Need help grasping the uses of Properties over Fields
  • 好的。 @Dustin Campbell 对所选答案 here 的评论是我迄今为止看到的唯一相关理由。

标签: c# properties field


【解决方案1】:

它主要是一个 OOP(面向对象编程)概念:封装 您可以在此处查看简要说明;

WikiPedia entry on Encapsulation

其中一个可能的用途是,例如在尝试分配一个值时,调用一个函数来验证这个新值。例如:

private Guid id;
public Guid Id
{
    get { return id; }
    set
    { 
        if (checkValue(value)==true)
        {
            id = value;
        } 
    }
}

【讨论】:

  • 是的。我了解封装 can 的用途。问题是,如果封装没有做任何特别的事情,难道它只是不必要的开销(和代码)吗?
  • 只有当您可以预测您的类将被其他类使用/扩展并且您需要保护您的代码时,才应使用封装。通常这是大约 80% 的时间。
猜你喜欢
  • 2017-10-25
  • 2012-02-05
  • 2013-03-11
  • 2011-06-19
  • 2010-10-27
  • 2011-08-03
  • 2011-03-05
相关资源
最近更新 更多