метод расширения для метода C#


Есть ли способ иметь метод расширения на методе? Примером для этого может быть метод, который принимает некоторый объект пользователя в качестве параметра, и вам нужно сделать проверку безопасности, если этот пользователь может использовать этот метод в самом начале метода. Может ли метод иметь метод расширения, такой как" проверить, может ли этот пользователь использовать меня " и вернуть bool.

Спасибо.

6   5  

6 ответов:

Вы можете использоватьаспектно-ориентированное программирование (AOP) для реализации сквозных проверок безопасности в коде.

В .NET у вас есть выбор из нескольких фреймворков AOP, например:

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

Вы не можете добавить метод расширения для метода с C#.

Но вы можете использовать аспектно-ориентированное программирование (AOP) , чтобы делать то, что вы хотите, используя PostSharp или Spring.NET например.

Я не совсем уверен, что вы ищете, но это пахнет декларативной безопасностью для меня.

Взгляните на: http://msdn.microsoft.com/en-us/library/kaacwy28.aspx

Я не уверен, что хорошо понял ваш вопрос. Однако, как насчет этого:

public static void EnsureUserHasAccess(this object obj)
{
    // check permissions, possibly depending on `obj`'s actual type
}

public static void DoSomething(this MyClass obj)
{
    // permissions check
    obj.EnsureUserHasAccess();

    // do something about `obj`
    …
}

public static void DoSomethingElse(this MyDifferentClass obj)
{
    // permissions check
    obj.EnsureUserHasAccess();

    // do something about `obj`
    …
}

Методы расширения В C# - это не расширения методов (не уверен, что я понимаю, что это значит), а методы, расширяющие объекты/классы.

Если вы хотите ввести в код описываемые проверки, вы можете посмотреть на PostSharp и AOP .

Вы можете пойти с ответом madgnome, который основан на аспектном программировании (рад видеть, что кто-то использовал это в .net), или вы можете использовать атрибуты и вставлять некоторый код в каждый метод, который должен быть защищен.