更好地使用方法或属性,有什么不同?

时间:2009-11-26 19:20:02

标签: c# asp.net oop

我在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;
    }
}

3 个答案:

答案 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对象最终都会使用同一组窗口。在我看来,数据集应该是一个实例成员,它在构造函数中(或在另一个适当的位置)创建。当然,这取决于您的要求。