Я ищу список разумных вариантов использования помещения атрибутов в параметре.
Я могу думать о некоторых хороших случаях для атрибутов в методе, но, может казаться, не вижу хорошее использование атрибута параметра. Просветите меня.
И что относительно атрибутов на типе возврата метода?
Конкретный случай, когда они используются, - это PInvoke. Параметры в сигнатурах PInvoke могут быть дополнительно украшены дополнительной информацией с помощью атрибутов, так что маршалинг отдельных аргументов PInvoke может быть либо явно указан, либо иметь переопределение поведения маршаллинга по умолчанию, например:
[DllImport("yay.dll")]
public static extern int Bling([MarshalAs(UnmanagedType.LPStr)] string woo);
Это отменяет поведение маршалинга по умолчанию для строки аргумент "Ву".
Например, в Vici MVC , платформе .NET MVC, параметры метода действия контроллера могут быть «сопоставлены» с параметром с другим именем. Вот как это делается в Vici MVC:
public void ActionMethod([Parameter("user")] int userId)
{
}
Это сопоставит параметр «пользователь» из строки запроса с параметром userId .
Это всего лишь простой пример того, как вы можете использовать атрибуты для параметров.
В Boo вы можете добавлять атрибуты макросов. Например:
def Foo([required]p):
pass
Это говорит компилятору преобразовать метод Foo в следующий:
def Foo(p):
raise ArgumentNullException("p") if p is null
Немного отличается от статических примеров, но, тем не менее, интересен.
Как показали другие, ответ на вопрос, для чего хороша та или иная вещь, может быть дан тем, что другие люди делают с ней. Например, в MEF вы можете использовать его в параметре конструктора, чтобы указать, что вы хотите импортировать зависимость с определенным именем:
public class Foo {
[ImportingConstructor]
public Foo([Import("main")] Bar bar) {
...
}
}
При использовании отражения вам могут потребоваться некоторые метаданные, связанные со свойством, например, если вы должны были выполнить генерацию кода на основе свойств в классе.
Я бы сказал, что этот вопрос немного открытый, рано или поздно возникнет необходимость, и вы будете благодарны за то, что язык ее поддерживает.