Я портирую приложение C ++ на C # и использую шаблоны. Я немного прочитал об этом, и я понимаю, что некоторые шаблоны сродни .Net дженерикам. Я прочитал SO ответ на этот случай, который хорошо подвел итог.
Тем не менее, некоторые виды использования шаблонов c ++, похоже, не связаны напрямую с дженериками. В приведенном ниже примере из статьи Шаблонное метапрограммирование Википедии шаблон, кажется, принимает значение, а не тип. Я не совсем уверен, как это будет перенесено на C #?
template <int N>
struct Factorial
{
enum { value = N * Factorial<N - 1>::value };
};
template <>
struct Factorial<0>
{
enum { value = 1 };
};
// Factorial<4>::value == 24
// Factorial<0>::value == 1
void foo()
{
int x = Factorial<4>::value; // == 24
int y = Factorial<0>::value; // == 1
}
Ясно, что для этого примера я мог бы сделать:
public int Factorial(int N){
if(N == 0) return 1;
return Factorial(N - 1);
}
но мне кажется, что это рефакторинг функции, а не порт семантически подобного кода.