“参数传递给函数”或“将值赋值给属性然后在函数中使用它们”是更好的选择?

时间:2012-03-16 04:16:34

标签: c# oop

在设计一个类(在c#或任何oop lang中)时,我总是感到困惑,我是否在类中定义了属性并在类的方法中使用它,或者只是简单地使用方法参数。

我在第一种方式中发现的一个问题是它创建了依赖性(比如,如果调用者忘记将值赋给属性等等,那么。)。

e.g。我正在设计一个“myexcel”类,它可以“导出到cvs”,“获取XML”,“格式化excel并保存”

这里我将“ExcelPath”作为myexcel的属性,还是将其作为参数传递给GetXml,导出,格式化方法?

3 个答案:

答案 0 :(得分:2)

属性应定义与对象关联的状态 - 符合条件的状态信息说明来自其他实例的一个实例。将对单个函数调用有效的时间信息存储到对象状态是没有意义的。换句话说,如果你创建了一个对象属性,因为它在某个方法中被使用,那么只有在多个调用中使用相同的属性值或者在多个方法中使用该属性时才有意义。

因此,在您的特定情况下,filePath应该是所有保存/导出方法的参数,因为从使用角度来看,对象实例表示一些数据,而save / export只是一种序列化它的方法。该文件路径仅对该调用有效 - 它可能会在多次调用时发生变化。

答案 1 :(得分:1)

这是一个判断电话。在您的示例中,它取决于您是否希望类型的实例表示文件系统中的特定文件。如果是这样,则在调用Save但是Path无效时抛出无效的操作异常。如果不是,则需要Save方法的path参数,如果值无效,则抛出无效的参数异常。

更一般地说,属性应该表示 state ,而方法参数应该表示方法所需的信息,但是在对象状态的外部。

答案 2 :(得分:1)

让我们试试这个小例子。

你有一个班级WashingMachine。它的职责是洗衣服。

 class WashingMachine
{

       public void WashClothes()
       {

       }

}

现在,您要将List<clothToWash> listOfCloth设为属性,还是将parameter设为WashClothes

很明显,它是否作为WashClothes的参数而非Property,因为它没有定义 state 对象

除此之外,属性应该很便宜,在分配值时不应抛出异常。

希望有所帮助。