创建课程时我总是停下来。我是建筑的中间人,所以请耐心等待。这是我的困境。我最终在一个课堂上提到了一点,我不得不问自己,“当我能从类的属性或私有支持领域得到我需要的东西时,这个方法是否需要参数?”。
现在对于公共方法,很明显你应该有参数,因为有人会消耗你的类并使用这些方法,无论它们是在实例类还是静态类中。这场辩论与公共方法无关,因为这对我来说是显而易见的。如果你的类中有一个公共方法,即使让我们说你可以从该类中的属性或私有字段获得所需的值之一,而不是要求该方法的参数并使用该参数,应该仍然需要参数并使用参数,或者至少在你指定一些参数时不要计算它们。至少这是我查看公共方法的方式,因为谁知道其他人如何使用该方法,他们需要知道需要传递什么,他们需要将实际数据传递给方法,因为它们在你的课外。
问题来自于我正在创建和使用私有方法或类似的东西。让我们说我创建了一个自定义控件(.cs)。它的工作是运行一系列方法,我已经打破了这个控件的逻辑,并创建了一些HTML字符串输出到浏览器。好吧,我创建了一个公共属性,这样任何使用此控件的人都可以为它提供某个对象。而且某个对象是我班级中有一半的方法用来帮助生成HTML。因为它是一个属性,我的自定义类中的任何方法都可以使用它。所以它完全绕过了在某些方法中创建参数的任何需要,因为我可以从属性中获取它。但后来我开始创建一个非常多的无参数方法,因为我从后备字段或后备字段和属性的组合中获取对象。或者我可能只是从一些事情中得到它们我能够在这个课程中得到我需要的其他方法吗?但是有些东西对你说不,那个坏人,你确实需要参数偶尔一次......至少是参数的组合,并在你的方法中使用一些支持字段或属性等,但并不总是折扣参数即使这些参数可能是一些内部传递给它(领域或属性)。但是,如果我要将内部传递为params,那么只是访问和使用那些字段或属性而不是通过方法作为params而是直接在方法本身内部之间的细微差别。
但是这让我感到烦恼,因为那时我怀疑为什么我需要方法参数才能在其他地方获取值。
有人可以解释这里的细节,并帮助我得出结论在你的方法或属性中使用大量支持字段而不是你在方法中指定的一些参数之间的界限。即使这些参数可能有些当另一个方法调用它时,仍然会从支持字段或属性传递一个值吗?
我希望这能让人感觉到任何意义,但我不能成为唯一一个遇到这种困境的人。也许我是唯一一个想到这个问题的人,我认为我不知道。但我个人使用OOP的主要问题是有很多方法可以获得你需要的东西(构造函数,属性,支持字段,方法)。
答案 0 :(得分:5)
何时在方法中使用参数?
根据“不要重复自己”的原则
,当对象中已经不时,所需信息无参数方法很好,没有必要告诉对象它已经知道的东西
答案 1 :(得分:1)
史蒂夫的回答很好。 只需添加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");
答案 2 :(得分:0)
另外(关于其他答案),参数越少,方法越可读和方便。如果一个方法采用了许多参数,它可能会违反Single Responsibility Principle,并且可能会分成几个更简单的方法,这些方法更容易使用和理解。