C#におけるメソッドの隠蔽(シャドウイング)とは?newキーワードの使い方を解説
C#における「メソッドの隠蔽(メソッドハイディング)」は、別名「シャドウイング(shadowing)」とも呼ばれます。これは、親クラスで定義されたメソッドを、子クラスが override キーワードを使わずに、独自のバージョンとして再定義する仕組みです。
通常のオーバーライドでは親クラス側のメソッドに virtual を付ける必要がありますが、シャドウイングでは子クラス側で new キーワードを付けるだけで、同じ名前・シグネチャのメソッドを新しく定義できます。この場合、子クラスのインスタンスから呼び出されるのは子クラス側のメソッドとなり、親クラスの同名メソッドは隠される形になります。
シャドウイングの実装例
以下は、new キーワードを使用して親クラスのメソッドを隠すサンプルコードです。
using System;
using System.Collections.Generic;
class Demo {
public class Parent {
public string GetInfo() {
return "This is Parent Class!";
}
}
public class Child : Parent {
public new string GetInfo() {
return "This is Child Class!";
}
}
static void Main(String[] args) {
Child child = new Child();
Console.WriteLine(child.GetInfo());
}
}
実行結果
This is Child Class!
overrideとの違いに注意
override によるオーバーライドはポリモーフィズムを実現し、親クラス型の変数に子クラスのインスタンスを代入しても、実際には子クラスのメソッドが呼び出されます。一方、new によるシャドウイングでは、変数の宣言時の型(静的な型)によって呼び出されるメソッドが決まります。この違いを正しく理解しておくことで、意図しない動作を防ぎ、より安全なコードを書くことができます。
-
C#のArrayクラスとは?主なプロパティと使い方をわかりやすく解説
C#のArrayクラスとは Arrayクラスは、C#におけるすべての配列の基底クラス(基本クラス)です。このクラスはSystem名前空間で定義されており、配列を操作するためのさまざまなプロパティやメソッドが用意されています。 通常、C#で配列を作成すると、その配列は暗黙的にこのArrayクラスから派生しているため、Lengthなどの便利な機能をすぐに利用できます。 Arrayクラスの主なプロパティ一覧 以下の表は、Arrayクラスで特によく使用される代表的なプロパティをまとめたものです。 番号 プロパティと説明 1 IsFixedSize 配列が固定サイズであるかどうかを示す値を取得
-
Pythonの静的メソッド(@staticmethod)とは?仕組みと使い方を解説
Pythonのクラスには、インスタンスメソッド、クラスメソッド、静的メソッド(スタティックメソッド)という3種類のメソッドを定義できます。それぞれ役割や呼び出し方が異なり、適切に使い分けることでコードの可読性と保守性が向上します。3種類のメソッドの違いインスタンスメソッド: 第1引数に self を受け取り、オブジェクト(インスタンス)の状態にアクセス・変更できます。クラスメソッド: @classmethod デコレータを付け、第1引数に cls を受け取り、クラス自体の状態にアクセスできます。静的メソッド: @staticmethod デコレータを付け、self も cls も受け取りません