今まで新人向けのオブジェクト指向の研修で、「継承」というのは、
class Sub : Super { }
こういうのだ、とか説明してきたんだけど…
ごめん。この説明はちょっとごまかしなんだ。
説明が面倒だったから…
本当は、これは C# 言語の「派生」なんだ。オブジェクト指向でいう継承と同義じゃない。
これは、「『派生』という機能を使って継承を実装する」っていう C# のイディオムに過ぎないんだ。
他にも、オブジェクト指向の用語を C# にマッピングして説明するときに結構ごまかしてるんだ。
Super s = new Super();
オブジェクト指向っぽくこれを表現してみると、
「Super というクラスに new というメッセージを送ると s というインスタンスが作られた」
という感じかな。
s.Foo();
これも、「s という名前のインスタンスに Foo というメッセージを送ると s はそれに応じた振る舞いを行う」という感じに表現できる。
でも、実は C# 的には、s はインスタンスじゃない。参照変数に過ぎない。インスタンスを参照してるだけ。インスタンスは別に在る。
これも、「クラスのインスタンスを参照変数で表現」っていう C# でオブジェクト指向をやる場合のイディオムを前提に説明しちゃってる。
用語の曖昧さを使って誤魔化していたんだ。説明すると長くなっちゃうからね。
本当は、どのレイヤの話をしているのか、明示すべきなんだ。
ごめんよ。