C#权限的属性,还是我错过了属性点?

时间:2015-12-17 21:04:21

标签: c# attributes

以下是我想要使用它们的方法:

class SecuredModel
{
    public SecuredModel() { }

    [Permission(Permissions.Read)]
    public void restrictedMethod()
    {
        if (IsPermitted)
        {
            // code
        }
    }
}

我在这里定义了“Permission”类:

[System.AttributeUsage(System.AttributeTargets.Method, AllowMultiple = true)]
class Permission : System.Attribute
{
    private Permissions PermissionsRequired { get; set; }

    public bool IsPermitted
    {
        // some code to check for permissions
    }

    public Permission(Permissions permissionsRequired)
    {
        this.PermissionsRequired = permissionsRequired;
    }
}

我遇到的问题是我不知道如何使用我分配给我的方法的属性。我想从方法中访问它们,这有可能吗?如果没有,我可以从方法外部访问它们吗?我无法找到我查看的任何MSDN页面的这种用法,我在SO上看到了一些答案,但我觉得lambda表达式过于复杂。它不应该那么难,对吧?

1 个答案:

答案 0 :(得分:1)

属性是一种装饰类的方法,但它们只有在你有一些抽象(如IDE或一些检查类的前期处理机制)来强制实现其目的时才有用。在他们装饰的方法/属性中使用它们没有意义(性能等等。)

考虑添加一些在检查类后设置的额外属性(私有/受保护),这样就不会一直反映出来。

以下是有关属性的有用链接:Reflection - get attribute name and value on property