回答編集履歴
2
誤字修正
answer
CHANGED
@@ -41,5 +41,5 @@
|
|
41
41
|
(例えばListクラスはIList、IReadOnlyListインターフェイスを実装してるからどちらのデータ型としても利用可能となります。)
|
42
42
|
|
43
43
|
上記に書いてきたような事情もあって、
|
44
|
-
インターフェイスを定義し、
|
44
|
+
インターフェイスを定義した後に、
|
45
|
-
各抽象クラス、クラス
|
45
|
+
各抽象クラス、クラスにて必要な分を実装するという方法が王道となっています。
|
1
追記・レイアウト修正
answer
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
同じオブジェクト指向言語でも、
|
2
2
|
C++みたいに多重継承を許す言語もあれば、
|
3
|
-
C#、Javaみたいに多重継承を許さない言語が存在します。
|
3
|
+
C#、Javaみたいに**多重継承を許さない言語**が存在します。
|
4
4
|
|
5
5
|
質問者様も抜粋してます、
|
6
6
|
MSDNの「クラスまたはインターフェイスの選択」の説明が今回の肝で、
|
7
|
-
コアな部分では何故インターフェースファーストの開発が行われるかの大きな理由となってきます。
|
7
|
+
**コアな部分では何故インターフェースファーストの開発が行われるか**の大きな理由となってきます。
|
8
8
|
|
9
|
-
仮に.NET Frameworkに
|
9
|
+
仮に**.NET FrameworkにICollection、IListが存在しない**と仮定してみましょう。
|
10
10
|
|
11
11
|
単純にICollectionやIListと構造がほぼ同じの**Collection、Listクラス**辺りから見ると、
|
12
12
|
**「インターフェースとかなくても問題ないじゃん」**と思いがちです。
|
@@ -19,8 +19,11 @@
|
|
19
19
|
Collectionクラスを継承して機能拡張したクラスにしなければなりません。
|
20
20
|
更にこのクラス機能群をそのまま利用するクラスが必要・・・となると、
|
21
21
|
**一瞬で継承の泥沼**にハマります。
|
22
|
+
(コアな部分ではこういったことが多々あるため、
|
22
|
-
|
23
|
+
インターフェイスがないと多分えらいことになるでしょう。)
|
23
24
|
|
25
|
+
むしろこのような作りとなっている**各クラスの継承階層を追う方がしんどい・・・**と思いませんか?
|
26
|
+
|
24
27
|
更に言うと上記は、
|
25
28
|
オブジェクトの相互変換性が皆無となります。
|
26
29
|
例えばCollectionとHogeCollectionをどちらもCollectionの機能範囲だけで操作したいという場合、
|
@@ -29,7 +32,7 @@
|
|
29
32
|
|
30
33
|
ですがインターフェースを事前に用意されていると、
|
31
34
|
**Collection、HogeCollectionどちらにもICollectionを実装**することで、
|
32
|
-
どちらもICollection
|
35
|
+
どちらもICollection型経由でのアクセスが可能となります。
|
33
36
|
これで呼び出し側をシンプルに出来ますね。
|
34
37
|
|
35
38
|
おまけにこれは質問者様も把握しているかと思いますが、
|