Поскольку не существует строгого определения «OO Language», «Functional Language», «Procedural Language», можно приводить аргументы в пользу того, что любой язык подходит в основном для любой классификации; Можно написать процедурную Java, объектно-ориентированный C и функциональный C ++. Обычно я использую классификацию, основанную на том, что поддерживают основные семантические функции, наряду с обычной практикой разработки. Хороший способ взглянуть на это - изучить встроенные и популярные фреймворки и посмотреть, какой стиль они используют.
Функциональные языки в основном определяются как языки с функциональными примитивами первого класса, причем стили разработки используют их для уменьшения сложности с такими идиомами, как «карта». Еще одна общая черта - сопоставление с образцом, но я не считаю это исключительно функциональным. «Чистые» функциональные языки также не имеют побочных эффектов, но это не обязательно (посмотрите, насколько размыты эти понятия?).
Итак, что такое C #? Ну, он имеет первоклассные примитивы стиля функции с делегатами (и получил лучшую синтаксическую поддержку стиля с анонимными делегатами и лямбдами). Это делает это функциональным? Возможно, если написать в функциональном стиле. Использует ли Framework этот стиль? Нет, не совсем.
Как таковой, я бы не стал классифицировать C # как функциональный в общем обсуждении - это, в лучшем случае, мультипарадигма с некоторым функциональным колоритом.