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

Jac*_*ack 0 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

该属性肯定是不正确的 - setter将抛出一个StackOverflowException,因为它只是递归.

即使吸气很奇怪,但 - 性能一般可以反映财产或类型的某些方面,而不仅仅是创建一个新对象,并忘记它.

就我个人而言:

public static DataSet CreateWindows()
{
    return new DataSet();
}
Run Code Online (Sandbox Code Playgroud)

这给人的印象正确,它的创造新的东西- GetWindows将意味着缓存,或该数据集是该类型的静态状态的一部分.

如果有一种可能性,即在以后的日子你会想要它做缓存,然后GetWindows是合理的-但我会再记录,这可能会或可能不会创建一个新的结果每次.


Lee*_*Lee 6

C#中的属性转换为get/set方法,因此从技术上讲它们是等效的.但是,框架指南建议应将属性用于"简单"操作,如字段访问.因此,在你的例子我会使用的方法GetWindows方法,因为它暗示消费者,它可能是一个长期运行的呼叫.