【问题标题】:Better use of methods or properties, whats different?更好地使用方法或属性,有什么不同?
【发布时间】:2009-11-26 19:20:01
【问题描述】:

我是 OOP 方面的新手,但必须开发一个大项目......只是为了想象,下面 2 个返回相同的示例。

哪一个是(更)正确的,嗯还是更干净?属性还是方法? 实际上,我必须从连接表中返回复杂的数据集......我避免复制返回数据集的完整查询。这就是为什么在这个例子中它只是一个空的。

谢谢。

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

【问题讨论】:

    标签: c# asp.net oop


    【解决方案1】:

    C# 中的属性被转换为 get/set 方法,因此在技术上它们是等价的。但是,框架指南建议应将属性用于“简单”操作,如字段访问。因此,在您的示例中,我将使用 GetWindows 方法方法,因为它向消费者暗示这可能是一个长时间运行的调用。

    【讨论】:

    • 谢谢。我什至喜欢属性:)...嗯,但是为什么经常使用的“Controls”属性不是GetControls()之类的方法。。后面我认为返回所有Controls一定很复杂...
    • @snarebold:它返回一个控件集合——没有理由不应该只是一个字段。但是,我不会将自己限制在只是字段访问...只是不要过火。
    • 好的。谢谢你。我明白.. 有道理
    【解决方案2】:

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

    即使是 getter 也很奇怪 - 属性通常反映属性或类型的某些方面,而不是仅仅创建一个新对象并忘记它。

    我个人会选择:

    public static DataSet CreateWindows()
    {
        return new DataSet();
    }
    

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

    如果以后有可能制作它进行缓存,那么GetWindows 是合理的 - 但我会记录它可能会或可能不会创建一个每次都有新结果。

    【讨论】:

    • 为什么不...属性也不能返回一个DataSet?...除非它是空的
    • 是的,一个属性可以返回一个数据集——但是一个属性只是创建一个新对象并返回它有点奇怪。那么它并不是真正的类型或对象的属性,不是吗?
    【解决方案3】:

    我建议,用非常笼统的术语来说,属性是对象“拥有”的东西,而方法是对象“做”的东西。你的房子“有”窗户,所以使用属性来检索窗户数据集是正确的。

    在您的代码中,每次有人访问该属性时,都会创建一个新数据集 - 可能不是您想要的。它也被声明为“静态”,这意味着您创建的任何 House 对象最终都将具有相同的窗口集。在我看来,数据集应该是在构造函数(或其他适当位置)中创建的实例成员。当然,这取决于您的要求。

    【讨论】:

    • 哦,很有趣......谢谢......我使用静态,因为后来我喜欢创建一个大类,并通过一行来获取它的属性和子类来自 cms 的特定数据集。目标是将数据集发送到转发器。我想是这样,因为在数据库后面有很多关系,我想在一个数据集中过滤。例如: rptRepeater.DataSource = myclass.services 同一页面上的另一个转发器 rptRepeater2 = myclass.specialservices。在“服务方法”背后,它从不同的表中收集数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2020-11-26
    • 1970-01-01
    • 2018-04-03
    • 2011-06-01
    • 1970-01-01
    • 2013-02-05
    相关资源
    最近更新 更多