簡體   English   中英

是否應將具有值類型的重載方法合並為通用方法?

[英]Should overloaded methods with value types be consolidated into a generic method?

在進行OO設計時,將使用簡單值類型的方法集合合並為通用方法更好嗎? 例如:

public int Sum(int x, int y)

// Overload with float.
public float Sum(float x, float y)

合並為:

public T Sum<T> (T x, T y)

謝謝,

斯科特

通常,是的,但是,特別是對於您的示例(兩個參數相加)-您不能使用泛型,因為+運算符不是可以將泛型類型參數約束到的任何接口的一部分:)

(注意:這是我在C#中談論的內容,可能仍然可以使用其他語言)

某些情況下,是(並非總是); 盡管有相反的傳言,這是可能的。 我為“ MiscUtil” (免費等)編寫了一些代碼, 正是這樣做的,並且適用於具有適當運算符的所有類型(甚至是您自己的結構和類,或者Nullable<T>等)。

這里的問題是,沒有支持Add等的接口,因此在dynamic之前(在4.0中),這樣做很棘手。 但可以完成-這是用法頁面 ,帶有類似的Sum (“ MiscUtil”中的實際代碼稍微復雜一些):

public static T Sum<T>(this IEnumerable<T> source)
{
    T sum = Operator<T>.Zero;
    foreach (T value in source)
    {
        if (value != null)
        {
            sum = Operator.Add(sum, value);
        }
    }
    return sum;
}

再次說明,在4.0中,其中很多相對簡單的是dynamic ,因為它支持運算符。 但是,上一次我對它進行基准測試時, dynamic比我(濫用) Expression慢。

順便說一句,標准LINQ 可以提供Min / Max的原因是由於IComparable / IComparable<T> ,由Comparer<T>.Default輔助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM