例如,可能在整数数组上有一个方法max。
public static int Max(int[] ints)
{
var max = ints[0];
foreach(var i in ints)
{
if(i > max)
{
max = i;
}
}
return max;
}
但实际上我们没有利用正在使用数组的事实,只是我们可以迭代它们,而我们不需要整数,我们只需要一个知道如何比较它自己的对象。所以更强大的方法可能是:
public static T MyMax<T>(IEnumerable<T> ts) where T : IComparable<T>
{
var max = ts.First();
foreach(var i in ts)
{
if(i.CompareTo(max) > 0)
{
max = i;
}
}
return max;
}
我猜以上折扣事实IEnumerable<T>
可能是无限的,这会导致无限期挂起,但那么你为什么要在最初找到无限可迭代的Max。
我想说的是,第二种方法比前者更强大,因为它根据需要对其参数进行了最少的假设。这个原则有名字吗?这甚至是一件事吗?
提前致谢。
答案 0 :(得分:1)
我将此编程称为接口。
界面编程的设计原则在声明变量的背景下最常被提及,而着名的四人帮书如何介绍该原理;但它同样适用于声明方法参数。
不要将变量声明为特定具体类的实例。相反,只提交由抽象类定义的接口。你会发现这是设计模式的共同主题......
这里的术语变量可以在广义上考虑,包括方法参数。