有没有一种方法可以在方法上拥有扩展方法?一个例子是,当您需要将某个用户对象作为参数传递给方法,并且您需要在方法的开头进行安全检查以确定该用户是否可以使用该方法时。这个方法能否拥有类似于“检查此用户是否可以使用我”并返回布尔值的扩展方法呢?
谢谢。
有没有一种方法可以在方法上拥有扩展方法?一个例子是,当您需要将某个用户对象作为参数传递给方法,并且您需要在方法的开头进行安全检查以确定该用户是否可以使用该方法时。这个方法能否拥有类似于“检查此用户是否可以使用我”并返回布尔值的扩展方法呢?
谢谢。
在C#中,您无法为方法添加扩展方法。
但是,您可以使用面向切面编程(AOP)来实现您想要的功能,例如使用PostSharp或Spring.NET。
Example of securing methods with PostSharp
public class BusinessDivision : BusinessObject
{
[SecuredOperation("Manager")]
public void EnlistEmployee(Employee employee)
{
// Details omitted.
}
}
我不确定我是否理解你的问题。不过,这个怎么样:
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`
…
}
你可以采用madgnome的答案,这是基于方面编程(很高兴看到有人在.net中使用它),或者你可以使用属性并将一些代码粘贴到每个需要保护的方法中。