あなたの理解は少しずれています。
まず、メソッドをオーバーライドするということは、インスタンスがその基本型としてキャストされている場合でも、仮想メソッド テーブルに適切なエントリがあるため、新しい実装が使用されることを意味します。
メソッドを非表示にする場合、インスタンスがその基本型としてキャストされると、仮想メソッド テーブルにエントリがないため、基本実装が使用されます。
次のクラス定義があるとします。
public class Base
{
public virtual void Say()
{
Console.WriteLine("Hello World!");
}
}
public class A : Base
{
public new void Say()
{
Console.WriteLine("42");
}
}
public class B : Base
{
public override void Say()
{
Console.WriteLine("Goodbye, Cruel World!");
}
}
次のコードは次のようになります。
var a = new A();
var b = new B();
var aAsBase = a as Base;
var bAsBase = b as Base;
a.Say(); // 42
aAsBase.Say(); // Hello World!
b.Say(); // Goodbye, Cruel World!
bAsBase.Say(); // Goodbye, CruelWorld!