始终拥有最抽象的参数是一个原则吗?如果是这样,它有一个名称吗?

时间:2016-06-02 00:08:06

标签: c# language-agnostic design-principles

例如,可能在整数数组上有一个方法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。

我想说的是,第二种方法比前者更强大,因为它根据需要对其参数进行了最少的假设。这个原则有名字吗?这甚至是一件事吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

我将此编程称为接口

界面编程的设计原则在声明变量的背景下最常被提及,而着名的四人帮书如何介绍该原理;但它同样适用于声明方法参数。

  

不要将变量声明为特定具体类的实例。相反,只提交由抽象类定义的接口。你会发现这是设计模式的共同主题......

这里的术语变量可以在广义上考虑,包括方法参数。