Вот очень хорошая статья об этой теме:
http://mattberseth.com/blog/2008/08/when_is_it_safe_to_modify_the.html
С помощью VS2010 RC я смог создать приложение .NET 3.5, которое использует дополнительные параметры в C #.
Так что да, все дело в синтаксическом сахаре.
VB.NET имеет необязательные параметры, если вы хотите использовать необязательные параметры в .NET 3.5.
У меня нет VS2010, установленного здесь для проверки, но я считаю, что это будет чисто языковая функция, и поэтому ее следует использовать независимо от целевой платформы.
Изменить: Глядя по этой ссылке (и нескольким другим) видно, что необязательные параметры компилируются в аргументы метода с атрибутом [opt] в il. Я не знаю, существовал ли этот параметр в предыдущих версиях clr, но все же думаю, что он есть.
VS 2010 поддерживает опциональные параметры в C# для решений .NET 3.5. Однако есть одна оговорка: компилятор командной строки будет сообщать об ошибках.
Таким образом, если у вас запущена автоматическая сборка - с помощью NANT или чего-то другого, использующего компилятор командной строки - ваши сборки будут неудачными.
Как и Jon Skeet, я получал "Функция 'optional parameter' не может быть использована, потому что она не является частью спецификации языка 3.0 C#". Однако в RTM версии Visual Studio вы можете выбрать версию языка "по умолчанию" в Project Properties->Build->Advanced. Это заставило его работать для меня.