在什么情况下有人会将接口(interface)作为参数传递(或接收)?它真的是一件有用的东西还是只是一种奇特的做事方式?
最佳答案
这是一个非常有用的东西。
取任何 LINQ extension methods , 例如。他们不关心传递给他们的是什么,只要它实现了 IEnumerable<T>
。 .这个想法是,它们都可以应用于您可以使用 foreach
枚举的任何内容。循环。
想象一下,如果他们都要求您通过 T[]
,那将是多么毫无意义的限制。数组,或 List<T>
对象,例如。
这只是一个非常微不足道的例子。让我们假设 LINQ 扩展不存在(如果我使用 .NET 2.0,这实际上是一种可能性)并且我想写一个 Sum
方法。
我可以这样写:
public static double Sum(List<double> values)
{
double sum = 0.0;
foreach (double value in values)
{
sum += value;
}
return sum;
}
一切都很好,但请注意这里的一些事情:我编写了方法来获取 List<double>
,这是一个具有比此代码所依赖的功能多得多的类。它在哪里使用 Insert
?它在哪里使用 RemoveAt
? FindAll
? Sort
?不,这些都不是必需的。那么这个方法真的有必要通过 List<double>
吗? ?
此外,假设我有一个 double[]
.从理论上讲,我应该能够将其作为 values
弹出。参数,因为我所做的只是使用 foreach
枚举它;但自从我输入了 values
作为List<double>
, 传递 double[]
到我的Sum
我必须这样做的方法:
double sum = Sum(new List<double>(myArray));
这只是一个完全不必要的新对象,我构建它只是为了调用代码,而这些代码本来就应该能够处理我的原始对象。
通过编写将接口(interface)作为参数的方法,您可以使您的代码更灵活、更强大,并且您可以避免施加不适当的限制(给我一个 X,尽管我可以很容易地用一个 Y) 关于调用代码。
关于c# - 接口(interface)作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3166532/