考虑到以下课程 - 我想知道这两个成员中哪一个是抽象的:
abstract class Test
{
public abstract bool Abstract { get; set; }
public bool NonAbstract { get; set; }
}
var type = typeof( Test );
var abs = type.GetProperty( "Abstract" );
var nonAbs = type.GetProperty( "NonAbstract" );
// now, something like:
if( abs.IsAbstract ) ...
不幸的是,IsAbstract
- 属性没有
我需要选择一个类的所有非抽象字段/属性/方法 - 但是也没有BindingFlags
来缩小选择范围。
答案 0 :(得分:12)
属性实际上是一些“语法糖”,由两种方法实现:getter方法和setter方法。
所以,我认为你应该能够通过检查getter和/或setter是否是抽象的来确定属性是否是抽象的,如下所示:
PropertyInfo pi = ...
if( pi.GetSetMethod().IsAbstract )
{
}
而且,AFAIK,一个领域不能抽象。 ;)
答案 1 :(得分:1)
首先:字段不能是抽象的,因为它们都是字段本身。
接下来我们注意到属性(在一个松散的意义上!)实际上是get_ / set_方法。
接下来,我们检查 具有IsAbstract
属性的内容,并查看MethodBase
(以及MethodInfo
}的内容。
最后,我们记住/了解/发现PropertyInfo
有GetGetMethod()
和GetSetMethod()
方法返回MethodInfo
,我们已经完成了,除了填写关于继承的混乱细节等等。