Обычно я использую необязательные параметры для метода, который может вызывать множество различных объектов. Например, если у вас было приложение, которое обрабатывает поиск, у вас могут быть параметры
List<string> SearchStuff(string searchString, Date startDate, Date endDate);
Позже вы можете начать думать о разбивке на страницы и захотите установить по умолчанию 25 результатов, но при этом вызывающая сторона сможет определить это и использовать дополнительный параметр, чтобы помочь вам, например:
List<string> SearchStuff(string searchString, Date startDate, Date endDate, int pageSize = 25);
Размер страницы, который вы видите, не является обязательным, если установить для него значение. Вызывающий может передать pageSize, если он хочет, или может пропустить все это вместе, и будет использовано значение по умолчанию.
Что касается именованных параметров, я не уверен, что использовал их в C # (или, если возможно, даже). Однако в Objective-c они используются постоянно:
- (NSString *) getThisFromInteger:(NSInteger)myInteger;
и при вызове метода вы фактически вводите именованные параметры при вызове его
[self getThisFromInteger: 24];
в отличие от C #, это было бы больше похоже на
self.getThis(24);
Надеюсь, это поможет некоторым.