2012-11-07 73 views
14

我包装调用的API以及我的大多数方法在他们的第一线:是否有像c#的python装饰器?

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

在Python中我会装点这些方法的东西,如@login_required

你会用什么来重构c#中那种类型的逻辑?

回答

6

您正在寻找称为面向方面编程(Aspect Oriented Programming)的更一般编程方法的子集。

C#似乎支持它通过几个库,也可以推出自己的,这要感谢一些CLR功能。请参阅Aspect Oriented Programming using .NET,其中涵盖了其基本原理(我将链接文章的部分内容讨论C#的具体内容,但如果您正在寻找像PostSharp这样的现成解决方案,其余部分同样有趣,如另一答案中所述)。

+0

感谢您的链接。我将检查这是否适用于'Unity3d'。 – Macarse

4

您可以使用C#的任何AOP工具,例如this之一。

随着PostSharp,软件开发人员可以封装实现 模式成称为方面类,这些方面应用到他们的 使用代码自定义属性。

+0

PostSharp是一个'.exe'。我想从使用Mono的'Unity3d'中使用它。 – Macarse

2

我不熟悉Python,但它似乎你正在寻找“属性”(MSDN),(它非常类似于Java注释)。

尤其是,.NET提供了“AuthorizeAttribute”,它完全符合你的要求(也许更多一点)。虽然你不在.NET之下,但是你仍然可以在实现中实现一些东西。

+2

'属性'只是元数据附加到类/方法等,他们自己什么都不做。您需要使用另一种工具,它使用反射读取这些元数据,并执行所有AOP工具所需的所需内容 – Ankur