Стив прав (не каламбур): методы расширения - это то, что вы просите. В C # вы бы сделали что-то вроде этого:
namespace ExtensionsNamespace; // Name this whatever you want.
public static class ListExtensions // must be public static!
{
// must be public static and the first parameter needs a "this"
public static IList<T> ToOrderedList<T>(this IList<T> originalList, IComparer<T> comparer)
{
// Code to take the original list and return an ordered version
}
}
А потом в вашем коде:
using ExtensionsNamespace;
...
IComparer<Book> comparer = GetBookComparer();
IList<BooK> books = GetBookList().ToOrderedList(comparer);
Есть несколько дополнительных вещей, которые вы можете сделать, используя лямбда-выражения, чтобы избежать необходимости писать собственный класс сравнения в определенных случаях и так далее. Однако, прежде чем вы заново изобретаете колесо, я бы посоветовал вам взглянуть на LINQ to Objects, в который уже встроено множество этих функций. Например:
using System.Linq;
...
IEnumerable<Book> booksInOrder1 = GetBookList().OrderBy(b => b.Title);
Это отвечает на ваш вопрос?