コレクション系インターフェースの型パラメータの共変性、および、実装されるメソッド、プロパティの早見表。
※IReadOnly~ は .NET 4.5 から導入
※非ジェネリックはもう使わないと思うので省略
IReadOnlyDictionary の Keys/Values プロパティの戻り値が IReadOnlyCollection<T> ではなく IEnumerable<T> なのは、Count プロパティの使用頻度と実装のし易さあたりが理由?
確かに Keys や Values の Count プロパティなんてほぼ使わないだろうし、IEnumerable<T> だと yield で簡単実装できるから、いい判断だと思う。
逆に、IDictionary の Keys/Values プロパティの戻り値 ICollection<T> は機能が過剰だし、実装も面倒。
.NET 4.5 からは IReadOnly~ を積極的に使っていこう・・・かな
※IReadOnly~ は .NET 4.5 から導入
※非ジェネリックはもう使わないと思うので省略
共変 <out T> |
メソッド | プロパティ | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
GetEnumerator() |
Add( T ) |
Clear() |
Contains( T ) |
CopyTo( T[], int ) |
Remove( T ) |
IndexOf( T ) |
Insert( int, T ) |
RemoveAt( int ) |
Count { get; } |
IsReadOnly { get; } |
this[ int ] { get; } |
this[ int ] { set; } |
||
IEnumerable<T> | ||||||||||||||
ICollection<T> | ||||||||||||||
IList<T> | ||||||||||||||
IReadOnlyCollection<T> | ||||||||||||||
IReadOnlyList<T> |
メソッド | プロパティ | ||||||||
---|---|---|---|---|---|---|---|---|---|
Add( TKey, TValue ) |
ContainsKey( TKey ) |
Remove( TKey ) |
TryGetValue( TKey, out TValue ) |
this[ TKey ] { get; } |
this[ TKey ] { set; } |
Keys { get; } |
Values { get; } |
||
IDictionary <TKey, TValue> |
他の項目は ICollection<T> 参照 Keys と Values は ICollection<T> |
||||||||
IReadOnlyDictionary <TKey, TValue> |
他の項目は IReadOnlyCollection<T> 参照 Keys と Values は IEnumerable<T> |
雑感
元々あまり使われなかっただろう IsReadOnly プロパティは、IReadOnly~ インターフェースが導入されたため、完全に要らない子に・・・IReadOnlyDictionary の Keys/Values プロパティの戻り値が IReadOnlyCollection<T> ではなく IEnumerable<T> なのは、Count プロパティの使用頻度と実装のし易さあたりが理由?
確かに Keys や Values の Count プロパティなんてほぼ使わないだろうし、IEnumerable<T> だと yield で簡単実装できるから、いい判断だと思う。
逆に、IDictionary の Keys/Values プロパティの戻り値 ICollection<T> は機能が過剰だし、実装も面倒。
.NET 4.5 からは IReadOnly~ を積極的に使っていこう・・・かな
0 件のコメント:
コメントを投稿