Есть ли способ применить атрибут к методу, который выполняется первым? - PullRequest
3 голосов
/ 07 марта 2012

Без использования библиотеки, такой как PostSharp, есть ли способ установить пользовательский атрибут, который может иметь логику, заключающуюся в том, что при присоединении к методу выполнит ДО входа в этот метод?

1 Ответ

5 голосов
/ 07 марта 2012

Нет; приписывать не предназначены для введения кода. Такие инструменты, как postsharp, обходят это дымом и зеркалами, но без этого: нет. Другим вариантом может быть шаблон декоратора, возможно, динамически реализующий интерфейс (совсем не тривиальный). Однако добавление служебного вызова метода в начало метода (ов) на намного проще и, вероятно, хорошо, поскольку, если у вас есть доступ для добавления атрибутов, у вас есть доступ для добавления вызова метода.

Или другими словами: такие инструменты, как postsharp, существуют точно, потому что не существует "из коробки".

// poor man's aspect oriented programming
public void Foo() {
    SomeUtility.DoSomething();
    // real code
}

В некоторых случаях подклассы могут быть полезны, особенно если подкласс выполняется во время выполнения (метапрограммирование):

class YouWriteThisAtRuntimeWithTypeBuilder : YourType {
    public override void Foo() {
        SomeUtility.DoSomething();
        base.Foo();
    }
}
...