Asp.net 为什么以及何时使用属性
我对asp.net中的属性感到非常困惑。 我只是不明白我们为什么要使用属性,以及何时应该使用它们。有人能详细说明一下吗Asp.net 为什么以及何时使用属性,asp.net,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; pu
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);
}
}
属性提供了通过属性对类中的字段进行读写来保护字段的机会。在其他语言中,这通常是通过实现专门的getter和setter方法的程序实现的。C#属性支持这种类型的保护,同时还允许您像访问字段一样访问属性
属性优于字段的另一个好处是,您可以随时间更改其内部实现。对于公共字段,基础数据类型必须始终相同,因为调用代码依赖于相同的字段。但是,使用属性,可以更改实现。例如,如果一个客户的ID最初存储为int,那么您可能会有一个需求更改,该更改使您执行验证,以确保调用代码永远不会将ID设置为负值。如果它是一个字段,您将永远无法执行此操作,但属性允许您在不破坏代码的情况下进行此类更改。现在,让我们看看如何使用属性
取自
属性提供了通过属性对类中的字段进行读写来保护字段的机会。在其他语言中,这通常是通过实现专门的getter和setter方法的程序实现的。C#属性支持这种类型的保护,同时还允许您像访问字段一样访问属性
属性优于字段的另一个好处是,您可以随时间更改其内部实现。对于公共字段,基础数据类型必须始终相同,因为调用代码依赖于相同的字段。但是,使用属性,可以更改实现。例如,如果一个客户的ID最初存储为int,那么您可能会有一个需求更改,该更改使您执行验证,以确保调用代码永远不会将ID设置为负值。如果它是一个字段,您将永远无法执行此操作,但属性允许您在不破坏代码的情况下进行此类更改。现在,让我们看看如何使用属性
这很容易。
类中的所有字段都必须是私有的(或受保护的)。要向另一个类显示字段,可以使用属性或get/set方法。属性较短
注意:不要声明只写属性。这是最糟糕的做法。很简单。
类中的所有字段都必须是私有的(或受保护的)。要向另一个类显示字段,可以使用属性或get/set方法。属性较短
注意:不要声明只写属性。这是最糟糕的做法。有几个很好的理由。首先,您可能需要在setter中添加验证逻辑,或者在getter中实际计算值
另一个原因与生成的IL代码有关。如果您正在处理分布在多个程序集上的大型项目,则可以更改属性背后的代码,而无需使用程序集的应用程序重新编译。这是因为属性的“访问点”保持不变,同时允许更改其背后的实现代码。我第一次读到这篇文章是在我研究自动属性的时候,因为我没有看到它们和普通公共变量之间的区别。有几个很好的理由。首先,您可能需要在setter中添加验证逻辑,或者在getter中实际计算值
另一个原因与生成的IL代码有关。如果您正在处理分布在多个程序集上的大型项目,则可以更改属性背后的代码,而无需使用程序集的应用程序重新编译。这是因为属性的“访问点”保持不变,同时允许更改其背后的实现代码。我第一次读到这篇文章是在研究自动属性的时候,因为我没有看到自动属性和普通公共变量之间的区别。属性是封装类数据的方便方法。 引用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;
}
}
见:
属性是封装类数据的方便方法。 引用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;
}
}
见:
最重要的原因是为了在setter中进行验证,而操作部分可以在get部分实现。 例如。 存储工作日,应该是1-7,如果我们使用普通变量并将其声明为public,任何人都可以指定任何值。 但在属性设置器中,您可以控制和验证 下一个你可以用它来追踪。也就是说,你知道怎么做