読者です 読者をやめる 読者になる 読者になる

new修飾子

C#

いきなり結構飛ぶけど・・・。

基底クラスを継承した派生クラスを定義するとき、基底クラスと同じ名前のメンバ(メソッドの場合は引数の数や型も)を定義すると、派生クラスオブジェクトからは派生クラスで定義したメソッドが実行される・・・。
このとき、基底クラスのメソッドは隠蔽される・・・。
ただ、このように派生クラスで同名メソッドを定義しただけでは、C#コンパイラが警告を出してしまうので、new修飾子をつける必要がある・・・。

基底クラスBaseClassにて、

派生クラスからもアクセスできるようにprotectedにしてる・・・。

コンストラクタが2つと、iとstrをセットするSet、出力するOutputを定義・・・。

派生クラスDerivedClassでは、

これまだ説明してなかったけど、コンストラクタは基底クラスのコンストラクタを呼ぶように、後ろにbaseを指定し、引数ありの時は引数を渡してる・・・。

今回の本題はココ・・・。
Outputは同じ名前のメソッドなので、newを指定して基底クラスのメソッドを隠蔽している・・・。

これでMainClassでは、

BaseClassのbaseobj、DerivedClassのderivedobjを用意・・・。

baseobjには10, "ABC"、derivedobjには20, "XYZ"をセット・・・。

baseobj, derivedobj、ともに出力・・・。

i = 10, str = ABC
(i, str) = (20, XYZ)
続行するには何かキーを押してください . . .

上はBaseClassのOutputが呼ばれてる・・・。
下はDerivedClassのOutputが呼ばれてる・・・。

派生クラスオブジェクトからは基底クラスメソッドが隠蔽されている・・・。

Sample/MainClass.cs at master · bg1bgst333/Sample · GitHub
Sample/BaseClass.cs at master · bg1bgst333/Sample · GitHub
Sample/DerivedClass.cs at master · bg1bgst333/Sample · GitHub