想象一下,你有abstract base class A
,还有
abstract class B
继承自A
+重写方法的foo()
此外,您有concrete class C
继承自B
C
继承了覆盖方法foo
现在考虑method foo
使用反射并遍历类属性。
问题是:当C.foo()
被推出时,反映将在C Class
属性或B class
属性上完成?
我只需要在级别C
的属性上完成它。
答案 0 :(得分:1)
请参阅BindingFlags.DeclaredOnly
:
public override void Foo() {
PropertyInfo[] piAry = GetType().GetProperties(BindingFlags.Public | BindingFlags.DeclaredOnly);
}
答案 1 :(得分:0)
让我们假设您的班级 A 看起来与此类似。
abstract class A
{
public string PropertyA { get; set; }
public abstract List<PropertyInfo> Foo();
}
现在,如果您的类 B 继承自此类,并覆盖 Foo()方法,那么它可能类似于以下定义。
abstract class B : A
{
public string PropertyB { get; set; }
public override List<PropertyInfo> Foo()
{
return GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)
.ToList();
}
}
此外,您的最后一个课程,即 C ,这是唯一具体的课程,将简单地定义如下。
class C : B
{
public string PropertyC { get; set; }
}
为了测试此解决方案,并且看到唯一返回的属性是 PropertyC ,您需要运行以下代码行。
class Program
{
static void Main()
{
new C().Foo().ForEach(x => Console.WriteLine(x.Name));
Console.Read();
}
}