関連する質問 ( IReadOnlyDictionary で共分散の欠如を回避する方法は? ) を読みましたが、それが私の問題にどのように役立つかわかりません。
以下は、Box
編集 ( を使用IBoxTarget
) および変更の通知( を使用) が可能なIBoxSource
です。
interface IBoxTarget
{
void DoSomething();
}
interface IBoxSource
{
event Action SomethingIsDone;
}
class Box : IBoxTarget, IBoxSource
{
public void DoSomething()
{
// . . . some logic . . .
if (SomethingIsDone != null) SomethingIsDone();
}
public event Action SomethingIsDone;
}
Room
のコンテナですBox
。また、次の 2 つのインターフェイスも実装します。
interface IRoomTarget
{
IReadOnlyDictionary<string, IBoxTarget> Boxes { get; }
}
interface IRoomSource
{
IReadOnlyDictionary<string, IBoxSource> Boxes { get; }
}
class Room : IRoomTarget, IRoomSource
{
Dictionary<string, Box> boxes = new Dictionary<string, Box>();
IReadOnlyDictionary<string, IBoxTarget> IRoomTarget.Boxes
{
get { return boxes; } // Error: "Cannot implicitly convert type ..."
}
IReadOnlyDictionary<string, IBoxSource> IRoomSource.Boxes
{
get { return boxes; } // Error: "Cannot implicitly convert type ..."
}
}
内に 2 つの異なる辞書を作成したくありませんRoom
。私は何をする必要がありますか?