interface 2

 
待望の第二回目!
誰が待望していたかって自分なんだけど。
 

改訂版 C#入門
第14章 インターフェイスの活用:
 http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_014/cs2_014_01.html

 
前回妙に浅い理解になった感があった interface 。
上記に紹介した@ITの勉強サイトにも続きがあった。
(はじめにざっと章立てを眺めたはずなのにすっかり見逃していたのか忘れていたのか
 
まず、前回触れるつもりで触れ損ねたのが問題の「多重継承」。
コード的には
 

class Test : IBase1, IBase2 {
	// 略
}

 
至ってわかりやすい。
C++を経験した私としては、クラス自体の多重継承にも馴染みはある。
独習C#にはコレが強力過ぎる言語仕様であり、バグの温床ともなり、コード解析の壁ともなったため、仕様を緩めた結果、C#が出した結論なのだというような記載があった。
クラス自体は単体の継承だけを行い、メソッドだけはいくつでも基底を作っておけるようにした。
(もちろんその他C#ならではの追加機能によって、C++以上の言語としての出来上がりになっている、…らしい(笑
※その辺りを今後見て行きたいのだが、、、delegate や generic(C#2.0)、hashtableにジャグ配列、他にもまだまだ。。。
 
参考サイトでは、代表的なインターフェースとして
 
IEnumerable
IComparable
 
について触れていた。
Enumと言えば C/C++ の列挙型を思い出すが、C#では foreach を使用可能にする。
IEnumerable を継承することで、イテレータとして扱うことが出来るようになる、と思えば良いのだろうか。
 
IComparable は単語通り比較可能を実装したインターフェース。
比較が可能になることで恩恵を受けられるのはソート機能。
ArrayList に自作ソートを突っ込んでいるサンプルがあったが、まだ interface の素晴らしさを深く理解したとは言い難い気がする。
 
どうしたものか(笑
実際に何か有用な使用方法を思いつくなり、目の当たりにするなり、かな。
さすがに色んな interface を作って検証して楽しんでいる時間はなさそうだ。