如何创建“自定义属性”以便它只能应用于“虚拟”方法?

时间:2012-07-27 23:15:26

标签: c# .net custom-attributes

如何创建“自定义属性”以便它只能应用于“虚拟”方法?

这应该没关系:

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

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

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

是否可以使用此类限制创建“自定义属性”?

4 个答案:

答案 0 :(得分:4)

没有。不支持这种限制。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

请参阅AttributeTargets枚举,了解可以应用属性的类型。

示例:

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

    }

答案 3 :(得分:0)

正如下面的帖子中提到的,你不能强迫编译器将其作为编译步骤进行检查,但你可以在应用程序启动时在运行时检查它 - 只需检查你应用属性的所有方法都是虚拟的。

C# Method Attribute force requirements such as abstract or static?