我对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);
}
}
答案 0 :(得分:2)
属性提供了通过属性读取和写入字段来保护类中字段的机会。在其他语言中,这通常由实现专门的getter和setter方法的程序来完成。 C#属性启用此类保护,同时还允许您像访问字段一样访问该属性。
属性对字段的另一个好处是您可以随时更改其内部实现。对于公共字段,底层数据类型必须始终相同,因为调用代码取决于字段是否相同。但是,使用属性,您可以更改实现。例如,如果客户的ID最初存储为int,则可能需要更改需要执行验证以确保调用代码永远不会将ID设置为负值。如果它是一个字段,你将永远无法做到这一点,但是一个属性允许你在不破坏代码的情况下进行这样的更改。现在,让我们看看如何使用属性。
答案 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;
}
}
答案 4 :(得分:1)
最重要的原因是为了验证目的,setter和操作部分可以在get部分中实现。 对于Ex。 存储工作日应该是1-7,如果我们采用正常变量并将其声明为公共变量,任何人都可以分配任何值。 但是在属性设置器中,您可以控制和验证。
下一个你可以用它来跟踪。这意味着,您可以知道客户调用了多少次设置和获取函数(统计目的,可能不常用)。
最后,您可以根据需要控制属性的只读,只写和读/写。