IDictionaryにはGetOrAddメソッドとAddOrUpdateメソッドがないため、ConcurrentDictionaryからIDictionaryへのキャストはスレッドセーフな実装を遮断しますか?
5 に答える
結果のオブジェクトは、依然として並行辞書になります。Add や Remove などの呼び出しは、基になる実装の TryAdd と TryRemove (スレッドセーフ) を使用します。オブジェクトを別の型にキャストしても、オブジェクト自体は変更されません。
また、明確にするために、ILSpy などのツールを使用して、デフォルトの IDictionary メソッドの実装と、それらがまだスレッドセーフであるかどうかを確認できます。
IDictionary
単なるインターフェースです。それにキャストすると、結果は ConcurrentDictionary の実装になり、メソッドGetOrAdd
とAddOrUpdate
メソッドが欠落します。
Item
おそらく、プロパティと Add
andメソッドを ( and ) メソッドContainsKey
の代わりに引き続き使用でき、キャストされたオブジェクトは引き続きスレッドセーフになります (基になる実装が であるため)。GetOrAdd
AddOrUpdate
ConcurrentDictionary
それは、形をした鍵穴を通して大きなConcurrentDictionary
物体を見ているようなものです。IDictionary
IDictionary
ConcurrentDictionary
短い答えいいえ。
インターフェイスを介してオブジェクトを操作しているため、具象実装を引き続き使用しています。機能やそのメソッドが失われることはありません。それらは利用できません。
ちなみに、ダウンキャスト時には明示的なキャストが必要ですが、アップキャスト時には明示的なキャストは必要ありません。常に安全に行うことができます。