This does not cancel it; it obscures . Given a reference to an object Derived, the function Base HelpMeNowwill not be available 1 but derivedObject.HelpMeNow()will call an implementation Derived.
, , HelpMeNow . Derived Base IHelper, Base HelpMeNow(), Derived .
Derived derivedReference = new Derived();
Base baseReference = derivedReference;
IHelper helperReference = derivedReference;
derivedReference.HelpMeNow(); // outputs "Derived.HelpMeNow()"
baseReference.HelpMeNow(); // outputs "Base.HelpMeNow()"
helperReference.HelpMeNow(); // outputs "Base.HelpMeNow()"
, , , . Base, HelpMeNow() Derived , . Base, , IHelper, :
class Derived : Base, IHelper{
public new void HelpMeNow(){Console.WriteLine("Derived.HelpMeNow()");}
void IHelper.HelpMeNow(){HelpMeNow();}
}
Derived , , . Derived , Base, IHelper, 2. IHelper.HelpMeNow , Base.
, baseReference.HelpMeNow() - "Base.HelpMeNow()", helperReference.HelpMeNow() "Derived.HelpMeNow()". , Base , , , Base.
1 : Derived, base., base.HelpMeNow().
2 , IHelper , , Base.