Есть ли что-то вроде python-декораторов для C#?

Я заключаю вызовы в API, и большинство моих методов имеют в своих первых строках:

if ( !Gree.Authorizer.IsAuthorized() )
{
    return;
}

В Python я бы украсил эти методы чем-то вроде @login_required,

Что бы вы использовали для рефакторинга этого типа логики в c#?

3 ответа

Решение

Вы ищете подмножество более общей методологии программирования под названием Аспектно-ориентированное программирование.

Кажется, C# поддерживает его через несколько библиотек, и можно также развернуть свою собственную, благодаря некоторым функциям CLR. См. Аспектно-ориентированное программирование с использованием.NET, которое охватывает его основные принципы (я связываю часть статьи, рассказывающую о специфике C#, но остальное не менее интересно, если вы ищете готовые решения, такие как PostSharp, как упоминалось в другом ответ).

Вы можете использовать любой инструмент АОП для C#, например, этот.

С помощью PostSharp разработчики программного обеспечения могут инкапсулировать шаблоны реализации в классы, называемые аспектами, и применять эти аспекты к своему коду с помощью пользовательских атрибутов.

Я не знаком с Python, но, похоже, вы ищете "атрибуты" ( MSDN) (которые очень похожи на аннотации Java).

В частности, .NET предоставляет " AuthorizeAttribute", который делает именно то, что вы хотите (и, возможно, немного больше). Хотя вы не используете.NET, это может пролить некоторый свет на реализацию, которую вы пытаетесь достичь.

Другие вопросы по тегам