C#, C♯, C#相談室 Part82
■ このスレッドは過去ログ倉庫に格納されています
0653デフォルトの名無しさん
2014/03/14(金) 01:16:05.74ID:lCkMUUlj>>651
ありがとうございます。
>>652
overrideと実装は別物じゃないのですか。たしか、オーバーライドって、ベースクラスのメンバが隠蔽されることですよね。
派生クラス型変数でそのメンバを参照すると隠蔽後のメンバが、ベースクラス型変数で参照すればもともとのメンバが見えるんですよね。
あっ、抽象メンバの実装って、オーバーライドの特殊な場合だと考えていいわけですね。
でも、もともとのメンバがabstructなので、ベースクラス型変数で参照してもオーバーライド後のメンバしか見えないのかな。
>>650
>インスタンスメソッドを持ってるのはインスタンスではなくてクラスだ。
クラス変数で参照することでインスタンスがそのクラスとしての意味を持つわけですね。object型で参照しても石ころにしか見えない。
>インスタンスの型に応じて見に行くクラスが変わるわけ。見に行った先に目的のメソッドがあればそれを実行し、なければ継承元のクラスを見に行くという動作をする。
だんだん先祖クラスへとキャストされながらメンバアクセスされるんですね。
私の>>647で書いたクラスBインスタンスは、キャストされることでまずそのベースである抽象クラスA変数で参照されてメンバであるメソッドαが呼ばれます。
メソッドα内ではthis.抽象メソッドがコールされています。このときに、おっしゃる「インスタンスの型に応じて見に行くクラスが変わる」わけですね。
すると、なるほど、抽象メンバなのでクラスAのままでは駄目なので、派生クラスBを通してthisインスタンスが見られて、めでたく具象メンバにアクセスできるのですね。
>>649
インテリセンスが機能しないので・・・以前のコードをコピペするので、真っ白なところにとっさに書けない。
合っているでしょうか。みなさまありがとうございます。
■ このスレッドは過去ログ倉庫に格納されています