در واقع method hiding صحیحه و مفهومی بنام over hiding نداریم دقیقا زمانی که شما نمیخواهید از متد شما شکل دیگری در کلاسهای فرزند استفاده بشه متد خودتون رو بصورت زیر hide میکنید :
در اصل میخواهید بگید که کاری به کلاس بیس خودت نداشته باش و پیاده سازی خودت رو انجام بده
using System;
namespace Polymorphism
{
class A
{
public void Foo() { Console.WriteLine("A::Foo()"); }
}
class B : A
{
public new void Foo() { Console.WriteLine("B::Foo()"); }
}
class Test
{
static void Main(string[] args)
{
A a;
B b;
a = new A();
b = new B();
a.Foo(); // output --> "A::Foo()"
b.Foo(); // output --> "B::Foo()"
a = new B();
a.Foo(); // output --> "A::Foo()"
}
}
}