【问题标题】:Is there something like python decorators for c#?是否有类似 c# 的 python 装饰器之类的东西?
【发布时间】:2012-11-07 11:54:24
【问题描述】:

我正在包装对 API 的调用,我的大多数方法都在它们的第一行中:

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

在 python 中,我会用 @login_required 之类的东西来装饰这些方法。

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

【问题讨论】:

    标签: c# unity3d gree


    【解决方案1】:

    您正在寻找一种称为面向方面编程的更通用编程方法的子集。

    C# 似乎通过多个库来支持它,并且由于某些 CLR 特性,还可以推出自己的库。请参阅Aspect Oriented Programming using .NET,它涵盖了它的基本原理(我正在链接文章中讨论 C# 细节的部分,但如果您正在寻找像 PostSharp 这样的现成解决方案,其余部分同样有趣,如另一个答案中所述)。

    【讨论】:

    • 感谢您的链接。我会检查这是否适用于Unity3d
    【解决方案2】:

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

    借助 PostSharp,软件开发人员可以封装实现 模式到称为方面的类中,并将这些方面应用到它们的 使用自定义属性的代码。

    【讨论】:

    • PostSharp 是.exe。我想从使用 Mono 的Unity3d 中使用它。
    【解决方案3】:

    我不熟悉 python,但您似乎正在寻找“属性”(MSDN),(与 Java 注释非常相似)。

    特别是,.NET 提供了“AuthorizeAttribute”,它完全可以满足您的需求(也许更多)。虽然您不在 .NET 下,但这可能仍会为您尝试实现的实现提供一些启示。

    【讨论】:

    • attributes 只是附加到类/方法等的元数据,它们自己不做任何事情。您需要使用另一个工具来使用反射读取此元数据并执行所有 AOP 工具所做的所需工作
    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多