C# 从基类继承重写的方法
假设您有C# 从基类继承重写的方法,c#,inheritance,reflection,overriding,C#,Inheritance,Reflection,Overriding,假设您有抽象基类A,并且 继承自命名的foo()的A+重写方法的抽象类B 此外,还有继承自B C继承了重写的方法foo。 现在考虑方法Fo< 正在使用反射并遍历类属性。 问题是:当C.foo()午餐时,将在C类属性或B类属性上进行反射? 我只需要对级别C的属性执行此操作。请参见BindingFlags。仅声明: public override void Foo() { PropertyInfo[] piAry = GetType().GetProperties(BindingFlags.
抽象基类A
,并且
继承自命名的foo()的A
+重写方法的抽象类B
此外,还有继承自B
C
继承了重写的方法foo
。
现在考虑<代码>方法Fo< <代码>正在使用反射并遍历类属性。
问题是:当C.foo()
午餐时,将在C类
属性或B类
属性上进行反射?
我只需要对级别C
的属性执行此操作。请参见BindingFlags。仅声明:
public override void Foo() {
PropertyInfo[] piAry = GetType().GetProperties(BindingFlags.Public | BindingFlags.DeclaredOnly);
}
请参见BindingFlags.DeclaredOnly
:
public override void Foo() {
PropertyInfo[] piAry = GetType().GetProperties(BindingFlags.Public | BindingFlags.DeclaredOnly);
}
让我们假设你的A班看起来像这样
abstract class A
{
public string PropertyA { get; set; }
public abstract List<PropertyInfo> Foo();
}
为了测试此解决方案,并查看唯一返回的属性是PropertyC,您需要运行以下代码行
class Program
{
static void Main()
{
new C().Foo().ForEach(x => Console.WriteLine(x.Name));
Console.Read();
}
}
让我们假设你的A班看起来像这样
abstract class A
{
public string PropertyA { get; set; }
public abstract List<PropertyInfo> Foo();
}
为了测试此解决方案,并查看唯一返回的属性是PropertyC,您需要运行以下代码行
class Program
{
static void Main()
{
new C().Foo().ForEach(x => Console.WriteLine(x.Name));
Console.Read();
}
}
编写代码并找出答案。只要几行代码,如果你在C上思考,在C上调用,它将在C上完成,就像在C属性上的普通调用一样。你也可以测试一下。测试应该有6行左右的长度。显示foo
的代码会很有帮助-如果不查看代码是如何编写的,就不可能说什么类型的属性将被迭代。调用C.foo()的唯一方法是对类型为C的对象。因此,当您使用此.GetType()时,您将看到C成员。编写代码并找出答案。只要几行代码,如果你在C上思考,在C上调用,它将在C上完成,就像在C属性上的普通调用一样。你也可以测试一下。测试应该有6行左右的长度。显示foo
的代码会很有帮助-如果不查看代码是如何编写的,就不可能说什么类型的属性将被迭代。调用C.foo()的唯一方法是对C类型的对象进行调用。因此,当您使用此.GetType()时,您将看到C成员。已经这样做了:),问题是它是否只从具体类获取属性,因为实现是在父基类上的(已经这样做了:),问题是它是否只从具体类获取属性,因为实现是在父基类上的