【问题标题】:Attribute to wrap functions?包装函数的属性?
【发布时间】:2014-01-22 18:20:16
【问题描述】:

我为线程同步创建了一个类,我想将其应用于方法、类、属性等,而无需将我的代码插入每个函数、类等。这是我必须执行的当前实现的一个示例:

public class NotWhatIWantExample
{
    LockingClass locker;
    public int function()
    {
        locker.EnterWriteBlock();
        if (condition)
        {
            locker.LeaveWriteBlock();
            return 0;
        }
        locker.LeaveWriteBlock();
        return 1;
    }
}

如果可能的话,接下来是我想做的两个例子

示例 2:

// [LockingClassAttribute(LockingClassAttribute.WriteBlock)] 
// Not Declared But Added Since Attribute Is Applied On A Method
public class WhatIWantExample
{
    //LockingClass locker; Included In The Attribute

    [LockingClassAttribute(LockingClassAttribute.WriteBlock)]public int function()
    {
        if (condition)
            return 0;
    }
}

示例 3:

[LockingClassAttribute(LockingClassAttribute.ReadWriteBlock)]
public class WhatIWantExample
{
    //LockingClass locker; Included In The Attribute

    //Function Would Override LockingClassAttribute.ReadWriteBlock
    [LockingClassAttribute(LockingClassAttribute.WriteBlock)]public int function()
    {
        if (condition)
            return 0;
        return 1;
    }
    //Would Inherit [LockingClassAttribute(LockingClassAttribute.ReadWriteBlock)]
    public int function2()
    {
        if (condition)
            return 0;
        return 1;
    }
}

这可能吗?

【问题讨论】:

    标签: c# compilation attributes word-wrap


    【解决方案1】:

    这是aspect orientated programming 的示例。它在 C# 中不直接可用,但您可以使用 PostSharp 来执行此类操作。

    看看OnMethodBoundaryAspect 类,它允许您在方法运行之前和完成之后运行代码。

    【讨论】:

    • 所以 Visual Studio 的 PostSharp 扩展允许这样做?
    • @user3141117 - 我没有使用过扩展,所以不能确定。
    【解决方案2】:

    你所追求的是aspect oriented programming。我自己从来没有应用过,但是有一些现成的解决方案。参见例如:Aspect Oriented Programming in C#

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 2017-07-05
      • 2016-09-08
      • 1970-01-01
      • 2017-10-20
      • 2012-05-07
      • 1970-01-01
      相关资源
      最近更新 更多