例如,
class Aclass
{
void method1()
{
int[] a = new int[5]{1,2,3,4,5};
var b = a.Accumulated().ToArray(); // so that b = {1,3,6,10,15}
}
}
目前Accumulated()
是一种扩展方法。但是我认为一个等价的方法是在Aclass中定义一个私有成员方法,以便MakeAccumulated(a).ToArray()
给出{1,3,6,10,15}
。
什么是好习惯?
答案 0 :(得分:2)
Aclass是一个为Aclass对象提供逻辑意义的方法的地方;最佳实践是不要将它用作辅助函数的通用存储。一个好的经验法则是,如果方法永远不会引用成员变量,那么它可能在类中不合适。
int数组上的函数可能在Aclass中没有位置。我把它放在扩展方法中。
答案 1 :(得分:1)
这不是良好做法的问题,而是偏好的问题。两者都是有效的选择。如果你只需要在Aclass的实例中使用该方法,那么我会将它限制为一个类方法,对于检查该类的其他人来说也更为明显。
答案 2 :(得分:1)
我会选择成员函数方法,导致extensions methods
,我个人,选择我无法扩展的内容,或者有问题扩展到(复杂性,不是我的代码,序列化问题,无论......)。在您的情况下,您有一个由您编写的类,因此只需按照 clear OOP设计进行扩展即可。
对于扩展方法,您需要为不熟悉您的代码的人定义另一个类,或者在2年之后为您定义,为什么以这种方式完成它将不太清楚。
问候。
答案 3 :(得分:1)
如果.Accumulated()仅从Aclass实例调用,则使其成为该类的成员。如果它仅在一个类的实例中使用,那么对于int [](或者像其他人指出的那样不可用)具有应用程序范围的扩展方法是不切实际的。请记住,扩展方法只是为了增加可扩展性。
public static string Hello(this string Value) { return Value + "Hello"; }
string s = "Hello".Hello();
...与:
相同 public static string Hello(string Value) { return Value + "Hello"; }
string s = Utilities.Hello("Hello");
如果你只想在另一个类的实例中使用它,你会将.Hello()放在实用程序类中吗?但是,如果在应用程序的其他地方使用.Accumulated(),则可以使用扩展方法。