4

私のターゲット言語は.netフレームワークを使用したC#です。このトピックの背後にあるポイントまたは理由を知りたいですか?

どんなアドバイスや提案も高く評価されます。

編集

なぜ私はこの質問をしたのですか?なぜなら今のところ、indexofのようなArrayクラスのいくつかの有用なメンバーがキャストの背後に燃えているからです!!! マイクロソフトがilistインターフェースを分割したほうがいいのではないかと思います。

4

1 に答える 1

6

暗黙的または明示的にインターフェイス全体を実装する必要がないことから始めることは注目に値します-それはメンバーごとの決定です...そして私はメンバーごとに異なる理由があります。私は推測しているだけです(ここで決定的な答えを出すことができる人はほとんどいません)が:

  • Count:特定の配列タイプ(ILをチェックしていません)を処理している場合、プロパティは特別なサポートを備えており、より効率的であると思われます。Length開発者に両方を提示しない方がクリーンです
  • IsFixedSize:配列を扱っていることがわかっている場合は、サイズが固定されていることがわかります
  • IsReadOnly:配列を扱っていることがわかっている場合は、それが可変であることを知っています
  • IsSynchronized:配列を扱っていることがわかっている場合は、配列が同期されていないことがわかります
  • Item:非ジェネリックIListインターフェイスは、受け入れ/返すインデクサーを公開しobjectます; 特定のタイプの配列インデクサーは、よりタイプセーフです(そして、おそらくより直接的にサポートされます)。のアクセサメソッドはArray、ランク!=1の配列のオプションを提供します。
  • SyncRootSyncRoot配列には決してありません
  • Add、、、、 :配列InsertのサイズRemoveを変更することはできないため、これらはいずれも適切ではありませRemoveAtClear

言い換えると、これが配列であるというコンパイル時の情報をすでに持っている場合は、答えをすでに知っているか、これらの操作を確実に使用できないか、またはそれを行うためのより良い方法があります。

合理的である可能性があるもの:

  • Contains、、 :これらはすべてCopyToIndexOf暗黙的なインターフェース実装を介して公開される可能性があります。なぜそうではないのか分かりません

GetEnumerator(from IEnumerable)は、暗黙的なインターフェース実装を介してすでに公開されています。

于 2012-02-02T07:09:01.667 に答える