我在OOP中很新,但是必须开发一个大项目...只是为了想象,下面的两个例子会返回相同的。
哪一个(更)正确,嗯或更干净?财产还是方法? 实际上我必须从连接表中返回复杂的数据集...我避免复制返回数据集的complet查询。这就是为什么在这个例子中它只是一个空的。
感谢。
public class House
{
public static DataSet Windows
{
// just for imaging
get
{
DataSet ds = new DataSet(); // Here would be my data set from sql which returns a windows collection.
return ds;
}
set
{
Windows = value;
}
}
public static DataSet GetWindows()
{
DataSet ds = new DataSet(); // Gets same right?
return ds;
}
}
答案 0 :(得分:6)
该属性肯定是错误的 - setter会抛出一个StackOverflowException,因为它只是递归。
即使是getter也很奇怪 - 属性通常反映属性或类型的某些方面,而不仅仅是创建一个新对象而忘记它。
就我个人而言:
public static DataSet CreateWindows()
{
return new DataSet();
}
这给人的印象是它正在创建新的东西 - GetWindows
意味着缓存,或者数据集是该类型的静态状态的一部分。
如果以后你可能希望 make 进行缓存,那么GetWindows
是合理的 - 但我会记录它可能会也可能不会每次都创造一个新的结果。
答案 1 :(得分:6)
C#中的属性转换为get / set方法,因此从技术上讲它们是等效的。但是,框架指南建议应将属性用于“简单”操作,如字段访问。因此,在您的示例中,我将使用GetWindows方法方法,因为它向消费者提示它可能是一个长时间运行的调用。
答案 2 :(得分:1)
我建议,就一般而言,属性是对象“拥有”的东西,而方法是对象“做”的东西。你的房子'有'窗口,所以使用一个属性来检索windows数据集是正确的。
在您的代码中,每次有人访问该属性时,都会创建一个新的数据集 - 可能不是您想要的。它也被声明为“静态”,这意味着您创建的任何House对象最终都会使用同一组窗口。在我看来,数据集应该是一个实例成员,它在构造函数中(或在另一个适当的位置)创建。当然,这取决于您的要求。