自定义属性 - 仅为私有成员设置属性用法

发布于 2024-10-08 08:09:18 字数 143 浏览 3 评论 0原文

我创建一个自定义属性,并且我想设置AttributeUsage(或者可能是属性类中的其他属性),以便我的属性只能是在私有方法中使用,这可能吗?

预先感谢您的回答!

I creating a custom attribute and I would like to the set the AttributeUsage (or maybe some other attribute in the attribute class) so that I my attribute can only be used in private methods, is that possible?

Thanks in advance for the answers!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深白境迁sunset 2024-10-15 08:09:18

C#(自 4.0 起) 中不存在允许您根据成员的可访问性限制属性 使用的功能。

问题是你为什么要这样做?

因为给出了下面的属性

[AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = true)]
sealed class MethodTestAttribute : Attribute
{
    public MethodTestAttribute()
    { }
}

和类,

public class MyClass
{
    [MethodTest]
    private void PrivateMethod()
    { }

    [MethodTest]
    protected void ProtectedMethod()
    { }

    [MethodTest]
    public void PublicMethod()
    { }
}

您可以使用以下代码轻松获取私有方法的属性:

var attributes = typeof(MyClass).GetMethods().
                 Where(m => m.IsPrivate).
                 SelectMany(m => m.GetCustomAttributes(typeof(MethodTestAttribute), false));

There is no such feature available in C# (as of 4.0) that allows you to restrict attribute usage based on a member's accessibility.

The question would be why do you want to do that?

Because given below attribute,

[AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = true)]
sealed class MethodTestAttribute : Attribute
{
    public MethodTestAttribute()
    { }
}

and below class,

public class MyClass
{
    [MethodTest]
    private void PrivateMethod()
    { }

    [MethodTest]
    protected void ProtectedMethod()
    { }

    [MethodTest]
    public void PublicMethod()
    { }
}

You can easily get attributes of private methods using following code:

var attributes = typeof(MyClass).GetMethods().
                 Where(m => m.IsPrivate).
                 SelectMany(m => m.GetCustomAttributes(typeof(MethodTestAttribute), false));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文