挙動の違い
override
とnew
キーワードは派生クラスをアップキャストしたときに挙動が異なります。
// 基底クラスと派生クラスを用意 public class BaseClass { public virtual void Execute() { Console.WriteLine("Base"); } } public class OverrideClass : BaseClass { public override void Execute() { Console.WriteLine("Override"); } } public class NewClass : BaseClass { public new void Execute() { Console.WriteLine("new"); } }
// 実際に挙動が異なる場合 private static void Main(string[] args) { BaseClass overrideClass = new OverrideClass(); BaseClass newClass = new NewClass(); // Override overrideClass.Execute(); // Base newClass.Execute(); }
さいごに
SOLID原則にリスコフの置換原則という考え方があります。
この原則についてマイクロソフトが触れているのですが,new
キーワードはこの原則を破る可能性が高いということが指摘されています。
リスコフの置換の原則は、継承クラスの置換を管理する場合のガイドラインを定義しています。基本クラスの代わりにオブジェクトの継承クラスを渡しても、呼び出されるメソッドの既存機能に支障をきたすことがなく、特定のインターフェイスの実装はすべて互いに置き換えられるべきである、という原則です。
C# で SOLID の原則に違反する危険性 | Microsoft Docs
一応補足として紹介させていただきました。
ではまた。