在類的方法中,是直接獲取字段值,還是通過屬性間接訪問字段以獲取字段值?
即在下面的類中,是使用Method1,還是使用Method2?
public class Test
{
private string field=string.Empty;
public Test(string field)
{
this.field=field;
}
public string Property
{
get { return field; }
set { field=value; }
} //在類的方法中,是直接獲取字段值,還是通過屬性間接訪問字段以獲取字段值? public string Method1()
{//訪問字段
return "Test:"+field;
}
public string Method2()
{//訪問屬性
return "Test:"+Property;
}}實際上,類中的方法對字段和屬性都有訪問權限(這里屬性為可讀可寫的)。
但我很想知道,在類的方法中,到底是直接訪問字段呢,還是通過屬性來訪問。
最好能有個權威的說法,謝謝!!!

解决方案 »

  1.   

    1、楼主的这种情况,没有区别,或者说你不用属性封装字段都可以;
    2、用属性访问器的好处在于它提供了可以保护字段,同时又不影响内部使用字段的可能性,
       比如只定义get,那么类的内部就可以通过操作字段实现处理,而不用担心外部对字段的改动;
    3、由于以上的好处,大家习惯于用属性封装字段;
    4、按照微软msdn的说法,如果你的类的method根本不依赖于字段(或者说字段仅仅是提供给外部使用的),那么就没有必要封装字段;
      

  2.   

    如果只是为了返回字段值,那么有了Property
    另外2个方法就没有存在的必要了
    因为Java不支持属性,所以要用方法的形式另外,一般建议在内部也尽量访问属性,而不是直接访问字段
    因为属性可以做一些Check或其它必要的动作,而字段不行当然也不是一概而论的,还是要看实际需求的
      

  3.   

    比如我就有这样的需求
    private bool? isOk;
    public bool IsOk{
        get {
    if(isOk == null)
      throw new Exception("没有初始化");
    return isOk.Value; }
    }这个isOk在内部使用时,要判断它是否赋过值,如果没赋值时要做一些特殊处理
    所以此时在内部使用要访问字段,而不是属性。