2009-07-14 19 views
5

创建类时我总是停下来。我对建筑非常感兴趣,所以对我很感兴趣。这是我的困境。我最终在一个课堂中发现了一个问题,我必须问自己:“当我从班级的财产或私人支持领域得到我需要的东西时,这个方法是否需要参数?”。方法参数困境

现在对于公共方法,显然你应该最有可能拥有参数,因为有人会消耗你的类,并使用这些方法,无论它们是在实例类还是静态类。这场辩论不是关于公共方法,因为这对我来说很明显。如果你的类中有一个公共方法,尽管可以说你可以从该类的属性或私有字段中获得所需的值之一,而不需要该方法的参数并使用该参数,应该仍然需要参数并使用参数,或者至少在指定一些参数时不要计算它们。至少这是我如何查看公共方法,因为谁知道别人可能会如何使用该方法,并且他们需要知道需要传递什么,并且他们需要将实际数据传递给方法,因为它们不在您的类中。

问题出现时,例如我创建和使用私有方法或类似的东西。可以说我创建了一个自定义控件(.cs)。它的工作是运行一些方法,我已经打破了这个控制的逻辑,并创建了一些HTML字符串输出到浏览器。那么,我创建一个公共属性,以便谁使用这个控件可以给它一个特定的对象。这个特定的对象是我班中一半的方法用来帮助生成HTML。因为它是一个属性,所以我的自定义类中的任何方法都可以使用它。所以它完全绕过了在这些方法中创建参数的任何需要,因为我可以从属性中获取它。但是后来我开始创建大量的无参数方法,因为我从后台字段或后台字段和属性的组合中获取对象。或者我可能只是从一些推理中获得他们,而我能够在课堂上得到我需要的其他方法?但接下来有些东西对你说没有,那是坏人,你确实需要一段时间的参数......至少有一些参数组合,并在方法中使用了一些支持字段或属性等,但并不总是折扣参数即使这些参数可能是传递给它的一些内部结构(字段或属性)。但是,如果我要将内部结构作为参数传递,那么只是访问和使用这些领域或属性之间的界限,而不是通过方法作为参数,而是直接在方法本身内部。

但是,困扰我,因为然后我质疑为什么我需要方法参数的情况下,我可以在其他地方获得价值。

有人可以在这里解释细线,并帮助我得出结论:在方法或属性中使用大量的支持字段,而不是在方法中指定的某些参数之间。尽管其中一些参数当另一个方法调用它时,可能仍然会从后台字段或属性传递一个值?

我希望这可以让人产生任何感觉,但我不能成为唯一遇到这种困境的人。也许我是唯一一个思考这个问题的人,我认为我不知道。但是我个人对OOP的主要问题是有很多该死的方法来获得你需要的东西(构造函数,属性,后台字段,方法)。

回答

5

少喝咖啡,少的话;-)

总结

时的方法使用的参数?

简短的回答

时所需的信息提供已经在对象,按照不重复自己的原则

参的方法都很好,没有必要告诉对象它已经知道的东西

+0

这是我从一个密友获得的答案,这也是我认为的另一个很不错的答案:首先,公共方法:外部调用者是否需要提供差异值?对于私人(和公共)思维继承,以及如果不同的值将被传递... – PositiveGuy 2009-07-14 02:56:27

1

Steve很好的回答。 只需在C#4.0中添加,您也可以使用默认参数的功能。这在某些情况下非常有用,特别是实用程序类。我在我的OracleHelper类中有这样的方法

ExecuteReaderNoParam(OracleConnection conn, string cmdText, OracleTransaction trans, CommmandType cmdType) 

大多数调用者不需要提供事务和命令类型。使用默认参数,我可以写为

ExecuteReaderNoParam(OracleConnection conn, string cmdText, OracleTransaction trans=null, CommmandType cmdType = CommandType.StoredProcedure) 

的调用者可以叫

OracleConnection connection = new OracleConnection(connectionString); 
OracleHelper.ExecuteReaderNoParam(conn, "SP_GET_ALL_STATUS"); 
0

而且(关于其他的答案)的方法,少参数更具可读性和方便的方法。如果一个方法需要很多参数,它可能违反了Single Responsibility Principle,并可能分成几个更简单的方法,这将更容易使用和理解。