昨天有问过,回复都是获取属性的 Set 或 Get 访问器来判断,这是不太准的。
自己又添加些判断,以为解决了,刚用到实现代码中测试下,死的更惨......
先贴出,代码:
private class TestClass : ITest { public string Metal { get; set; } public virtual string Wood { get; set; } public string Water { get; set; } public string Fire { get; set; } public virtual string Earth { get; set; } } private interface ITest { string Metal { get; set; } string Wood { get; set; } }
我想通过下面的方式来获得到两个带有 Virtual 关键字的属性。
var x = typeof(TestClass).GetProperties()
还要添加些什么判断???
如果有再追加豆....
我昨天的回答你没有仔细看啊。最后的一个回答已经已经排除Interface的干扰了。
isVirtual=True and isFinal=False 就行了。
如果是Interface的情况 isFinal=True。
对不起,真没注意到 IsFinal ......
再追下,如果 TestClass 继承了个 抽象类。有什么像 IsFinal 这样的属性或方法来判断么?
private class TestClass : AbstractClass { public override string MyProperty { get; set; } } private abstract class AbstractClass { public abstract string MyProperty { get; set; } }
我在过滤这种属性时,用的是找到基类,排除 abstract 属性。