在類的方法中,是直接獲取字段值,還是通過屬性間接訪問字段以獲取字段值?
即在下面的類中,是使用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;
}}實際上,類中的方法對字段和屬性都有訪問權限(這里屬性為可讀可寫的)。
但我很想知道,在類的方法中,到底是直接訪問字段呢,還是通過屬性來訪問。
最好能有個權威的說法,謝謝!!!
即在下面的類中,是使用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;
}}實際上,類中的方法對字段和屬性都有訪問權限(這里屬性為可讀可寫的)。
但我很想知道,在類的方法中,到底是直接訪問字段呢,還是通過屬性來訪問。
最好能有個權威的說法,謝謝!!!
2、用属性访问器的好处在于它提供了可以保护字段,同时又不影响内部使用字段的可能性,
比如只定义get,那么类的内部就可以通过操作字段实现处理,而不用担心外部对字段的改动;
3、由于以上的好处,大家习惯于用属性封装字段;
4、按照微软msdn的说法,如果你的类的method根本不依赖于字段(或者说字段仅仅是提供给外部使用的),那么就没有必要封装字段;
另外2个方法就没有存在的必要了
因为Java不支持属性,所以要用方法的形式另外,一般建议在内部也尽量访问属性,而不是直接访问字段
因为属性可以做一些Check或其它必要的动作,而字段不行当然也不是一概而论的,还是要看实际需求的
private bool? isOk;
public bool IsOk{
get {
if(isOk == null)
throw new Exception("没有初始化");
return isOk.Value; }
}这个isOk在内部使用时,要判断它是否赋过值,如果没赋值时要做一些特殊处理
所以此时在内部使用要访问字段,而不是属性。