Ну, проще говоря, вы можете просто использовать лямбду:
public void DoSomething(Func<int, int, int> op)
{
Console.WriteLine(op(5, 2));
}
DoSomething((x, y) => x + y);
DoSomething((x, y) => x * y);
// etc
Это не очень интересно, хотя. Было бы неплохо, чтобы все эти делегаты были подготовлены для нас. Конечно, вы можете сделать это с помощью статического класса:
public static class Operator<T>
{
public static readonly Func<T, T, T> Plus;
public static readonly Func<T, T, T> Minus;
// etc
static Operator()
{
// Build the delegates using expression trees, probably
}
}
Действительно, Марк Гравелл сделал нечто очень похожее в MiscUtil , если хотите посмотреть. Вы можете позвонить:
DoSomething(Operator<int>.Plus);
Это не совсем красиво, но, я полагаю, это самое близкое, что поддерживается на данный момент.
Боюсь, я действительно не понимаю, что такое Ruby, поэтому я не могу это комментировать ...