繁体   English   中英

如何创建“自定义属性”,以便仅将其应用于“虚拟”方法?

[英]How do I create a “Custom Attribute” so that it can only be applied to “virtual” methods?

如何创建“自定义属性”,以便仅将其应用于“虚拟”方法?

这应该没问题:

[OnlyOnVirtual]
public virtual void VirtualMethod()
{
    //do something
}

在这里,我想提出一个编译或执行错误:

[OnlyOnVirtual]
public void NonVirtualMethod()
{
    //do something
}

是否可以创建具有此类限制的“自定义属性”?

否。不支持这种限制。

您不能为此使用引起编译错误,但是您可以在任何使用属性方法的代码中抛出运行时异常。 对于使用需求超出编译器可以强制执行的情况,这是一种非常典型的方法。 请注意,您不能引起一般的“执行错误”(在执行反射的代码之外),因为属性是元数据,并且仅在运行时当代码在它们之上反映时才“使用”。

有关可以应用属性的类型,请参见AttributeTargets枚举。

例:

 [AttributeUsage(AttributeTargets.Class)]
    public class MyAttribute : Attribute
    {

    }

如下面的文章所述,您不能强制编译器将其作为编译步骤进行检查,但是可以在应用程序启动时的运行时中进行检查-只需检查应用了属性的所有方法都是虚拟的即可。

C#方法属性强制要求,例如抽象还是静态?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM