私のターゲット言語は.netフレームワークを使用したC#です。このトピックの背後にあるポイントまたは理由を知りたいですか?
どんなアドバイスや提案も高く評価されます。
編集
なぜ私はこの質問をしたのですか?なぜなら今のところ、indexofのようなArrayクラスのいくつかの有用なメンバーがキャストの背後に燃えているからです!!! マイクロソフトがilistインターフェースを分割したほうがいいのではないかと思います。
私のターゲット言語は.netフレームワークを使用したC#です。このトピックの背後にあるポイントまたは理由を知りたいですか?
どんなアドバイスや提案も高く評価されます。
編集
なぜ私はこの質問をしたのですか?なぜなら今のところ、indexofのようなArrayクラスのいくつかの有用なメンバーがキャストの背後に燃えているからです!!! マイクロソフトがilistインターフェースを分割したほうがいいのではないかと思います。
暗黙的または明示的にインターフェイス全体を実装する必要がないことから始めることは注目に値します-それはメンバーごとの決定です...そして私はメンバーごとに異なる理由があります。私は推測しているだけです(ここで決定的な答えを出すことができる人はほとんどいません)が:
Count
:特定の配列タイプ(ILをチェックしていません)を処理している場合、プロパティは特別なサポートを備えており、より効率的であると思われます。Length
開発者に両方を提示しない方がクリーンですIsFixedSize
:配列を扱っていることがわかっている場合は、サイズが固定されていることがわかりますIsReadOnly
:配列を扱っていることがわかっている場合は、それが可変であることを知っていますIsSynchronized
:配列を扱っていることがわかっている場合は、配列が同期されていないことがわかりますItem
:非ジェネリックIList
インターフェイスは、受け入れ/返すインデクサーを公開しobject
ます; 特定のタイプの配列インデクサーは、よりタイプセーフです(そして、おそらくより直接的にサポートされます)。のアクセサメソッドはArray
、ランク!=1の配列のオプションを提供します。SyncRoot
:SyncRoot
配列には決してありませんAdd
、、、、 :配列Insert
のサイズRemove
を変更することはできないため、これらはいずれも適切ではありませRemoveAt
んClear
言い換えると、これが配列であるというコンパイル時の情報をすでに持っている場合は、答えをすでに知っているか、これらの操作を確実に使用できないか、またはそれを行うためのより良い方法があります。
合理的である可能性があるもの:
Contains
、、 :これらはすべてCopyTo
、IndexOf
暗黙的なインターフェース実装を介して公開される可能性があります。なぜそうではないのか分かりませんGetEnumerator
(from IEnumerable
)は、暗黙的なインターフェース実装を介してすでに公開されています。