C#方法重载与接口参数
本文关键字:接口 参数 重载 方法 | 更新日期: 2023-09-27 18:10:45
我只是想知道以下示例的"最佳实践"是什么:我有一个数字数组或数字列表,并希望将其提供给一个函数以返回平均值。
对于每种情况,是否最好重载方法:
double Average(int[] intArray){...}
double Average(uint[] uintArray){...}
double Average(double[] doubleArray){...}
...
double Average(List<int> intList){...}
...
或者,使用某种类型的接口更好吗:
double Average(IEnumerable arrayOrList)
{
// Branching logic for array or list.
}
谢谢!
编辑
以CCD_ 1为例。我有几个数字算法,需要能够在各种数字数据上运行。
看看Enumerable的各种重载。制导的平均扩展方法:
public static double Average(this IEnumerable<int> source)
这种风格的方法适用于实现IEnumerable<T>(T[],List<T>,HashSet<T>,ReadOnlyCollection<T>,…(,并避免了由非通用IEnumerable参数引起的开销。由于C#没有where T : num
约束,因此需要为您希望支持的所有基元类型(Int32、Int64、Single、Double、Decimal…(提供重载。
接口将允许您提供数组或任何其他集合。不过,您可能希望使用像IEnumerable<int>
这样的强类型接口。
假设Average
只是一个例子,您应该使用IEnumerable,但使用您的数据类型重载函数,如下所示:IEnumerable<DataType>
例如:
double Average(IEnumerable<Int32> array){...}
double Average(IEnumerable<Double> array){...}