如何通过反射识别抽象成员

tan*_*ius 5 c# reflection

鉴于以下课程 - 我想知道这两个成员中的哪一个是抽象的:

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 ) ...
Run Code Online (Sandbox Code Playgroud)

不幸的是,没有像IsAbstract-property 那样的东西.
我需要选择一个类的所有非抽象字段/属性/方法 - 但也没有BindingFlags缩小选择范围.

Fre*_*els 12

属性实际上是一些"语法糖",由两种方法实现:getter方法和setter方法.

所以,我认为你应该能够通过检查getter和/或setter是否是抽象的来确定属性是否是抽象的,如下所示:

PropertyInfo pi = ...

if( pi.GetSetMethod().IsAbstract )
{
}
Run Code Online (Sandbox Code Playgroud)

而且,AFAIK,一个领域不能抽象.;)