Dictionary<string,object> dict = new Dictionary <string,object>();
dict
" " を他のオブジェクトでインスタンス化できますか?
例えば:
dict = new Dictionary<string,bitmap>();
また:
dict = new Dictionary<string, Image>();
Dictionary<string,object> dict = new Dictionary <string,object>();
dict
" " を他のオブジェクトでインスタンス化できますか?
例えば:
dict = new Dictionary<string,bitmap>();
また:
dict = new Dictionary<string, Image>();
いいえ、Dictionary<string, object>
とDictionary<string, Bitmap>
は2つの異なるタイプであるためです。
次のシナリオで何が起こるか想像してみてください。
Dictionary<string, Bitmap> bmpDict = new Dictionary<string, Bitmap>();
Dictionary<string, object> dict = bmpDict;
dict.Add("someKey", 42);
dict
の値はに入力されているため、コンパイラはそれをコンパイルする必要があります。object
したがって、int
これは有効な選択です。Bitmap
ただし、これは、値のみを受け入れるインスタンス化されたディクショナリと衝突します。
Bitmap someBmp = bmpDict["someKey"];
明らかに、値はBitmap
の宣言およびインスタンス化されたタイプに従ってである必要がありますbmpDict
が、上記で見たように、ではないものが変数Bitmap
を介して追加されました。dict
ご覧のとおり、型安全性は破られています。
したがって、Dictionary<string, object>
およびDictionary<string, Bitmap>
を相互に割り当てることはできません。
直接の質問に答える場合。
として立証することは不可能です
Dictionary<string, object> dick;
dick = new Dictionary<string, Image>();
dickは、Imageタイプのオブジェクトのみの値を保持できるディクショナリと矛盾する任意のタイプのオブジェクトを保持できるディクショナリタイプとして宣言されている ためです。
もちろん、あなたはどんなタイプの値でも ディックを埋めることができます。
更新:OR Mapperによる説明と、それを正しく解釈する方法
についてはまだ疑問があります。
そのような論理はあまり説明しません。
1)
Bitmap someBmp = bmpDict["someKey"];
として働くべきだった
object someBmp = bmpDict["someKey"];
2)
このロジックでは、次のようにインスタンス化することは不可能でした。
object obj = new Image();
obj = new BitmapImage();
しかし、それは可能です。
IMO、ここでの要点は、タイプの辞書です
Dictionary <string, Image>()
タイプのディクショナリが同じ(または互換性のあるサブ)タイプの値のみを含むことができます
Dictionary<string, object>
異なるの?