有没有时间在c#中使用公共字段是好的?

时间:2011-06-24 18:51:52

标签: c#

有没有时间在c#中使用公共字段而不是属性? 如果没有好的案例可以使用它们,为什么它们可以使用这种语言?

7 个答案:

答案 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 stringpublic static string{get;}稍微高效,因为前者消除了方法调用开销。另一方面,我认为这会被编译器优化掉。

答案 5 :(得分:0)

我还注意到,当您在ASP.NET页面上使用变量时,您可能需要在后面的代码中将变量声明为public。不确定是否有其他方法可以做到。

答案 6 :(得分:0)

.NET属性纯粹是语法糖,没有别的。无论如何,CLR在引擎盖下创建相同的set / get方法。这是一个公共属性稍微更多的OOP,而不是暴露公共字段,它使您能够控制条目的验证,例如,在setter上。