日期:2014-05-17  浏览次数:20786 次

类的函数调用类的字段好,还是调用类的属性好
本帖最后由 chunjiang8257 于 2012-11-15 10:25:12 编辑
请教各位大虾,类的函数调用类的字段好,还是调用类的属性好?
public class InfoRow
{
private List<string> _content=null;


public List<string> Content
{
get
{
return this._content;
}
set
{
this._content=value;
}
}

public int Length
{
get
{
return this._content.Count;
}
}

public InfoRow()
{
}

public bool Init(string[] data)
{
if(data.Length>0)
{
this._content.Clear();
//还是this.Content.Clear(); 
for(int i=0;i<data.Length;i++)
{
this._content.Add(data[i]);
//还是this.Content.Add(data[i]);
}
}
if(this._content.Count>0)
{
return true;
}
else
{
return false;
}
}
}

------解决方案--------------------
字段,有些属性没有get或者set
------解决方案--------------------
如果属性没有特别代码逻辑,类自身的函数一般调字段,这样代码一目了然,也少了一层调用。
------解决方案--------------------
内部调用肯定是调用Field,除非你用的是匿名Property,没写Field,否则都应该用Field。
------解决方案--------------------
类的内部调用字段,少一层调用。外部调用属性。
------解决方案--------------------
对于set,get没有啥操作代码的。使用内部成员 。
有的话用属性了。
------解决方案--------------------
问题的关键是你有逻辑处理没有,如果没有逻辑处理,只是单纯的赋值,用字段就行了
------解决方案--------------------
从OOP设计的角度看,应该调用属性。

ls很多人提到了“没有什么逻辑的情况下不如调用字段”,其实这个观点是错误的。微软也意识到了使用属性产生的负面作用,主要是不必要的额外代码,所以在C# 3.0后增加了自动属性,应该从中很明显地看出微软对这个问题的态度,微软是鼓励大家使用属性的。

有了自动属性,无论是VB还是C#,代码都得到了最简化,没有理由再觉得代码冗繁而不用了。

一些人也担心,使用属性会不会降低性能,同样,这是不需要担心的。CLR早就对此作了优化,操纵属性的代码已经被内联,因此调用开销是不存在的。

为什么要坚持使用属性,那怕“没有逻辑”,这是因为字段和属性从调用者看来代码没什么区别,其实却有本质的不同,属性归根结底说,是一个方法,而字段不是。因此两者在二进制上不兼容。如果你开发一个面向第三方的软件组件,那么当你需求复杂,意识到需要判断逻辑而决意将字段变成属性的时候,这意味着所有调用你程序的客户端都不能工作了,这是很糟糕的事情。

所以编程这件事情不可以模棱两可,必须坚持规范的准则,才能编写出高质量的代码。
------解决方案--------------------
随意,没有这么绝对,要是只是本类用,那就字段好了,要是涉及到继承啊调用啊神马的属性易读
------解决方案--------------------
引用:
从OOP设计的角度看,应该调用属性。

ls很多人提到了“没有什么逻辑的情况下不如调用字段”,其实这个观点是错误的。微软也意识到了使用属性产生的负面作用,主要是不必要的额外代码,所以在C# 3.0后增加了自动属性,应该从中很明显地看出微软对这个问题的态度,微软是鼓励大家使用属性的。

有了自动属性,无论是VB还是C#,代码都得到了最简化,没有理由再觉得代码冗繁而不……

这就是所谓的书呆子,你去反编译微软的dll看看,类的内部都是使用字段而从不用属性。
------解决方案--------------------
引用:
引用:从OOP设计的角度看,应该调用属性。

ls很多人提到了“没有什么逻辑的情况下不如调用字段”,其实这个观点是错误的。微软也意识到了使用属性产生的负面作用,主要是不必要的额外代码,所以在C# 3.0后增加了自动属性,应该从中很明显地看出微软对这个问题的态度,微软是鼓励大家使用属性的。

有了自动属性,无论是VB还是C#,代码都得……


这和我说的不矛盾啊。并不能因为有人僵化地书呆子地去理解别人的意思而说别人的原意就是“书呆子”。