interface

さて、ついに技術備忘録(?)初回。
前回「はじめに」の記事の最後で「完全初心者のつもりで始めよう」と書いた。
 
真意は「C#の完全初心者」。
誤意として「プログラミングの完全初心者」と取られそうな気がする。
私はプログラミング自体には10年近く触れているので、1から始める方には ? が付く部分もあるかもしれないが、そこはご了承いただくとしよう。
 
さて、C〜VC++/PHP などが主に経験した言語。
一応 .NET(VB/VC++)も経験するにはしたが、半年程度。
その状態で、C#だから学ぶべきものをピックアップして行きたい。
特に最初は。
また、Java が言語誕生の経緯などからしても C# と似ているようだが、幸か不幸か私は Java の経験はほぼない。
 
前置き終わり。
あ、3つほど追記。
1. 参考にしたWebや書籍は可能な限り明らかにしつつも、転載せず自分の言葉で表現していく
2. 極力シンプルなタイトルで、どんな内容を取り上げたのかわかるようにする
3. オリジナルでソースコードを書いて検証するに至れば、コードもなるべく公開する
 
 
 
さて、今回はタイトル通り interface に焦点を当てる。
 
継承の概念は知っている前提とする。
(正しく定義を記述する自信がない、とも言う
とはいえ、継承と言っても C# において、方法は一つではない。
クラスの継承を行う上で、そのクラスの用途やそれに従った設計において、選択できる方法が複数ある、という意味。
 
今回の参考は@IT。
(今回”も”になっていくと思うけど…(笑

改訂版 C#入門
第4章 継承とインターフェイス
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_004/cs2_004_01.html

 
ココを参考にすると、少なくとも3つの方法で継承を実装することが出来る。
単純な継承はもちろんクラスを派生させれば良いわけだが、今回は受けたいと思う継承の恩恵がある。
 
「基底側で定義したメソッドを派生側で使う」
 
「基底クラス」ではなく、「基底側」と書いたのはインターフェースはクラスではないから。
また「使う」という表現も微妙だが、どうしてそんな曖昧な表現なのかは以下の3種類の方法の「使う」を見ればわかるだろうか。
私の文章力がないため、ともいう(笑
 
1. virtual / override
2. abstract / override
3. interface
 
順に簡単に説明していく。
 
virtual と override は、それぞれ基底クラスと派生クラスでのメソッドの修飾子。
特徴は、virtual method の処理内容を、override method の処理内容で上書き出来る点だ。
仮想と上書き、という訳でも容易に想像がつく通り、とも言える。
 
次に、abstract と override 。
抽象と上書き、だ。
特徴は、abstract クラスはインスタンスを作成することが出来ない点。
元々から基底クラスとして設計する場合、virtual より abstract の方が良さそうだ。
 
最後に interface はどんなものか。
何も知らずに前述の2つを理解すると十分のような気がするが、やはり interface があるのはまた別の特徴を持つがゆえ。
その特徴は、私が思うに3点。
(なんか3ばっか。。。
 
・クラスではない(もちろんインスタンスは作成できない)
・多重継承できる(ちょっと調べると色々論議を呼んでいるようですが…)
・メソッドしか含めることが出来ない
 
ふーむ。
浅くしか突っ込めなかったけど、初回なのでヨシとするか。。。