为什么以及何时使用属性

时间:2011-07-20 07:15:25

标签: asp.net

我对asp.net中的属性非常困惑。 我只是不明白为什么我们使用属性,何时应该使用它们。任何人都可以对此进行详细阐述。

public class Customer
{
    private int m_id = -1;

    public int ID
    {
        set
        {
            m_id = value;
        }
    }

    private string m_name = string.Empty;

    public string Name
    {
        set
        {
            m_name = value;
        }
    }

    public void DisplayCustomerData()
    {
        Console.WriteLine("ID: {0}, Name: {1}", m_id, m_name);
    }
}

5 个答案:

答案 0 :(得分:2)

  

属性提供了通过属性读取和写入字段来保护类中字段的机会。在其他语言中,这通常由实现专门的getter和setter方法的程序来完成。 C#属性启用此类保护,同时还允许您像访问字段一样访问该属性。

     

属性对字段的另一个好处是您可以随时更改其内部实现。对于公共字段,底层数据类型必须始终相同,因为调用代码取决于字段是否相同。但是,使用属性,您可以更改实现。例如,如果客户的ID最初存储为int,则可能需要更改需要执行验证以确保调用代码永远不会将ID设置为负值。如果它是一个字段,你将永远无法做到这一点,但是一个属性允许你在不破坏代码的情况下进行这样的更改。现在,让我们看看如何使用属性。

取自CSharp-Station

答案 1 :(得分:1)

这很容易。 类中的所有字段必须是私有的(或受保护的)。要向另一个类显示字段,您可以使用属性或get / set方法。属性较短。

P.S。不要声明只写属性。这是最糟糕的做法。

答案 2 :(得分:1)

有几个很好的理由。首先,您可能需要在setter中添加验证逻辑,或者实际计算getter中的值。

另一个原因是与生成的IL代码有关。如果您正在处理分布在多个程序集上的大型项目,那么您可以更改属性后面的代码,而无需使用程序集重新编译的程序集。这是因为属性的“访问点”保持不变,同时允许更改其后面的实现代码。当我在研究自动属性时,我首先阅读了这个内容,因为我没有看到它们与普通公共变量之间的关系。

答案 3 :(得分:1)

属性是封装类数据的便捷方式。 引自MSDN:

  

属性是一个提供灵活读取机制的成员,   写或计算私有字段的值。可以使用属性   好像他们是公共数据成员,但他们实际上是特殊的   称为访问器的方法。这样可以轻松访问数据   仍然有助于提高方法的安全性和灵活性。

让我们考虑两种常见的情况:

1)您希望公开Name属性,而不必在类外部更改它:

  private string m_name = string.Empty;
  public string Name
  {
      get
      {
         return m_name;
      }
  }

2)您希望每次访问或设置数据时执行一些检查或运行一些代码:

  private string m_name = string.Empty;
  public string Name
  {
      get
      {
         return m_name;
      }
      set
      {
         m_name = (String.IsNullOrEmpty(value)) ? "DefaultName" : value;
      }
  }

请参阅: http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx

答案 4 :(得分:1)

最重要的原因是为了验证目的,setter和操作部分可以在get部分中实现。 对于Ex。 存储工作日应该是1-7,如果我们采用正常变量并将其声明为公共变量,任何人都可以分配任何值。 但是在属性设置器中,您可以控制和验证。

下一个你可以用它来跟踪。这意味着,您可以知道客户调用了多少次设置和获取函数(统计目的,可能不常用)。

最后,您可以根据需要控制属性的只读,只写和读/写。