C#方法属性强制要求如抽象或静态?

时间:2012-03-06 17:12:32

标签: c# inheritance attributes abstract

这可能更像是一个设计问题,然后是“我可以这样做吗?”题。我正在创建一个属性,其目标定义为Method。是否有任何可能的方法对方法域施加限制,即目标方法必须声明为抽象,虚拟,静态等?

最终目标是扫描这些方法并在子类中实现它们 - 但我希望它们是抽象的。有没有更好的方法来实现对属性目标的伪限制?

2 个答案:

答案 0 :(得分:3)

您应该能够使用MethodInfo.IsVirtualMethodInfo.IsAbstract过滤掉使用您的属性修饰的非虚拟方法,以确定它是否是抽象的。

foreach(var assem in AppDomain.CurrentDomain.GetAssemblies())
    foreach (var type in assem.GetTypes())
        foreach (var mthdInfo in type.GetMethods())
        {
            if (mthdInfo.GetCustomAttributes(typeof(MyCustomAttribute), false) && mthdInfo.IsVirtual && !mthdInfo.IsFinal)
                // This is a method you can use
        }

有一些方法可以检测您列出的其他约束,并且方法应该类似。

编辑:已修复以回答方法的问题。

答案 1 :(得分:2)

不,抱歉。您可以在Inherited中使用AttributeUsage参数,但它可能对您有所帮助。

编辑:我知道这篇文章没有直接解决您的问题,但您可以应用它讨论的一些原则:

Restrict custom attribute so that it can be applied only to Specifc types in C#?