有没有时间在c#中使用公共字段而不是属性? 如果没有好的案例可以使用它们,为什么它们可以使用这种语言?
答案 0 :(得分:4)
公共字段打破了封装的原则,将类对象的内部状态暴露给世界。这并不意味着您不会或不应该这样做,但通过属性公开您的内部状态是更好的做法,因此您可以提供验证或其他保护技术,以防止恶意用户以潜在危险的方式随意更改您的状态。当然,您也可以在类方法中编写逻辑来验证正确的状态,以便适合您。
答案 1 :(得分:1)
常数是我能想到的一个重要实例。如果你有一个基本上只以常量形式提供数据的类(字符串,整数等),那么为每个数据提供一个属性是没有意义的。
答案 2 :(得分:1)
通常,公共只读字段很有用。它们在结构中也很有用,特别是对于互操作目的,例如:
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
/// <summary>
/// The x-coordinate of the upper-left corner of the rectangle.
/// </summary>
public int Left;
/// <summary>
/// The y-coordinate of the upper-left corner of the rectangle.
/// </summary>
public int Top;
/// <summary>
/// The x-coordinate of the lower-right corner of the rectangle.
/// </summary>
public int Right;
/// <summary>
/// The y-coordinate of the lower-right corner of the rectangle.
/// </summary>
public int Bottom;
}
答案 3 :(得分:0)
如果您不需要任何内部处理,请使用公共字段。
例如;
public string Description;
将与
完全相同private string _description;
public string Description
{
get { return _description; }
set { _description= value; }
}
然而,后者将允许你做其他事情;
public string Description
{
get {
//Do something here
}
set {
//Do something here
}
}
答案 4 :(得分:0)
使用public static readonly string
比public static string{get;}
稍微高效,因为前者消除了方法调用开销。另一方面,我认为这会被编译器优化掉。
答案 5 :(得分:0)
我还注意到,当您在ASP.NET页面上使用变量时,您可能需要在后面的代码中将变量声明为public。不确定是否有其他方法可以做到。
答案 6 :(得分:0)
.NET属性纯粹是语法糖,没有别的。无论如何,CLR在引擎盖下创建相同的set / get方法。这是一个公共属性稍微更多的OOP,而不是暴露公共字段,它使您能够控制条目的验证,例如,在setter上。