检查类的属性或方法是否声明为密封的



我有以下派生:

interface IMyInterface
{
    string myProperty {get;}
}
class abstract MyBaseClass : IMyInterface // Base class is defining myProperty as abstract
{
    public abstract string myProperty {get;}
}
class Myclass : MyBaseClass // Base class is defining myProperty as abstract
{
    public sealed override string myProperty 
    {
        get { return "value"; }
    }
}

我希望能够检查类的成员是否被声明为密封。有点像这样:

PropertyInfo property = typeof(Myclass).GetProperty("myProperty")
bool isSealed = property.GetMethod.IsSealed; // IsSealed does not exist

感觉这一切都是为了能够运行测试,检查代码/项目的一致性。

以下测试失败:

PropertyInfo property = typeof(Myclass).GetProperty("myProperty")
Assert.IsFalse(property.GetMethod.IsVirtual);

听起来您想断言一个方法不能被重写。在这种情况下,您需要IsFinalIsVirtual属性的组合:

PropertyInfo property = typeof(Myclass).GetProperty("myProperty")
Assert.IsTrue(property.GetMethod.IsFinal || !property.GetMethod.IsVirtual);

MSDN的一些注释:

要确定方法是否可重写,仅检查IsVirtual为真是不够的。对于可重写的方法,IsVirtual必须为真,IsFinal必须为假。例如,一个方法可能是非虚的,但它实现了一个接口方法。公共语言运行库要求所有实现接口成员的方法都必须标记为virtual;因此,编译器将该方法标记为virtual final。因此,在某些情况下,方法被标记为virtual,但仍然不可重写。

相关内容

  • 没有找到相关文章

最新更新