Tag: override

C#:有什么方法可以跳过多态中的一个基本调用?

class GrandParent { public virtual void Foo() { … } } class Parent : GrandParent { public override void Foo() { base.Foo(); //Do additional work } } class Child : Parent { public override void Foo() { //How to skip Parent.Foo and just get to the GrandParent.Foo base? //Do additional work } } 如上面的代码所示,我如何让Child.Foo()调用GrandParent.Foo()而不是进入Parent.Foo()? base.Foo()将我带到Parent类。

调用多态字段事件

考虑以下代码: public class TableMain { public virtual event Action UpdateFilter; …. } public class TableSub : TableMain { public override event Action UpdateFilter; public void UpdateQuery() { ….. if (UpdateFilter!=null) { UpdateFilter(); // Invocation of polymorphic field-like event??? } } } 在此代码中, ReSharper显示警报“调用多态字段事件”。 我的问题是:它究竟意味着什么? 这是一个糟糕的编程习惯的警报吗? 此外,以多态方式调用事件是不好的做法吗? (知道事件只能从声明它的类中提出。)

有关Virtual / new …以及接口的更多信息!

昨天我发布了一个关于new / virtual / override关键字的问题,我从你的答案中学到了很多东西。 但我仍有一些疑虑。 在所有“盒子”之间,我与类型的方法表中真正发生的事情失去联系。 例如: interface I1 { void Draw(); } interface I2 { void Draw(); } class A : I1, I2 { public void Minstance() { Console.WriteLine(“A::MInstance”); } public virtual void Draw() { Console.WriteLine(“A::Draw”); } void I2.Draw() { Console.WriteLine(“A::I2.Draw”); } } class B : A, I1, I2 { public new virtual […]

C#:通过显式指定接口来覆盖属性

在尝试从Collection类覆盖ICollection.IsReadOnly属性的显式接口实现时,我遇到了一些文档,指出显式接口成员实现无法被覆盖,因为它们不能具有virtual或abstract等修饰符。 在MSDN上,他们甚至可以通过创建另一个由显式接口成员实现调用的抽象或虚拟成员来指定如何使显式接口成员实现可用于inheritance。 到目前为止没问题。 但后来我想知道: 为什么C#可以通过显式指定接口来覆盖任何显式实现的接口成员? 例如,假设我有一个这样的简单接口,具有属性和方法: public interface IMyInterface { bool AlwaysFalse { get; } bool IsTrue(bool value); } 还有一个显式实现接口的类A ,并且有一个方法Test() ,它调用自己的接口成员实现。 public class A : IMyInterface { bool IMyInterface.AlwaysFalse { get { return false; } } bool IMyInterface.IsTrue(bool value) { return value; } public bool Test() { return ((IMyInterface)this).AlwaysFalse; } } 如您所见,四个成员中没有一个是虚拟的或抽象的,所以当我像这样定义一个B类时: public class […]

如何确定MethodInfo是否是基本方法的覆盖

我试图确定我从类型实例上的GetMethod调用获得的MethodInfo对象是由类型还是由它的基类实现的。 例如: Foo foo = new Foo(); MethodInfo methodInfo = foo.GetType().GetMethod(“ToString”,BindingFlags|Instance); ToString方法可以在Foo类中实现。 我想知道我是否得到了foo实现? 相关问题 是否可以判断派生类中是否已覆盖.NET虚方法?

对C#中的“覆盖”与“新”感到困惑

我有以下课程: class Base { public virtual void Print() { Console.WriteLine(“Base”); } } class Der1 : Base { public new virtual void Print() { Console.WriteLine(“Der1”); } } class Der2 : Der1 { public override void Print() { Console.WriteLine(“Der2”); } } 这是我的主要方法: Base b = new Der2(); Der1 d1 = new Der2(); Der2 d2 = new Der2(); […]

关于虚拟/新/覆盖的困惑

我对virtual / new / override事情有点困惑。 这是一个例子: class A { public virtual void mVVirtual() { Console.WriteLine(“A::mVVirtual”); } } class B : A { public virtual void mVVirtual() { Console.WriteLine(“B::mVVirtual”); } } class C : B { public override void mVVirtual() { Console.WriteLine(“C::mVVirtual”); } } class Test { static void Main() { B b1 = new C(); […]