きな粉もち.net

.NET関連仕事に携わっています。OSSのソースを読んで気がついたことを中心に呟いたりブログに投稿したりしています。最近はUiPathを使ったRPAも研究中。気軽にフォローやツッコミよろしくおねがいします! Gitはここを使っています https://github.com/kinakomotitti

C#×custom collection×作る理由

この記事の目的

この記事では、
log4netのAppenderCollectionクラス(カスタムコレクション)が作られた理由を自分なりにまとめること
を目的としています。

本題

  1. 前回までのあらすじ
  2. カスタムコレクションを作る理由とは(一般論)
  3. log4netではなぜつくったか?
前回までのあらすじ

前回は、カスタムコレクションに着目するきっかけとなったlog4netのコードをメモしました。
kinakomotitti.hatenablog.com

これといって情報はありませんがw

カスタムコレクションを作る理由とは(一般論)

Microsoft「通常は、カスタムコレクションを作るのではなく、提供しているコレクションを使ってね」
とのことでしたが、実際にlog4netではカスタムコレクションを使っています。
”通常”以外の利用方法が知りたいと思い、調査を進めました。
参考にしたのは以下の2つのQ&Aでの議論です。
softwareengineering.stackexchange.com
softwareengineering.stackexchange.com


上記議論から、カスタムコレクションを利用するとよいシナリオは以下のようなものだと感じました。
・Ilist、Icollectionのメソッドを一部公開したくない場合
・AddやRemove処理で追加の処理が必要な場合

しかし、.NET 2.0以降、ジェネリックスのリリース以降では、カスタムコレクションを作るという選択肢は少なくなってきているようです。
Microsoftのいう通常というのは、「.NET Frameworkが比較的最近リリースされたものをターゲットにしている場合」ととらえてもよいのかもしれません。
逆に、通常ではない場合は、「.NET Framework2.0以前から開発しているライブラリやアプリケーションですでにカスタムコレクションを実装している場合」のことを指しているのではないかなと感じました。
既にある場合は、むりにListに変換しなくてもよいですもんね。

log4netではなぜつくったか?

次回は、これまでの調査をもとにlog4netのカスタムコレクションがなぜ作られたかを見ていきたいと思います。