Наиболее близкими к C ++ шаблонам в C # являются дженерики, но они не очень близки. В частности, вы не можете использовать операторы типа >
между значениями универсального типа, потому что компилятор не знает о них (и вы не можете ограничивать типы на основе операторов). С другой стороны, вы можете написать:
public T GetMax<T>(T lhs, T rhs)
{
return Comparer<T>.Default.Compare(lhs, rhs) > 0 ? lhs : rhs;
}
или
public T GetMax<T>(T lhs, T rhs) where T : IComparable<T>
{
return lhs.CompareTo(rhs) > 0 ? lhs : rhs;
}
Обратите внимание, что первый из них является нулевым; второй нет.
Полное описание дженериков выходит далеко за рамки ответа о переполнении стека; MSDN содержит некоторую информацию или обратитесь к своей любимой книге на C #.