2012-01-27 124 views
2

我保存的参数的字典类:演员词典<字符串,类>到的IDictionary <字符串,接口>

public class Parameter : IExecutionParameter, IDesignerParameter 
{ 
} 

public interface IExecutionSettings 
{ 
    IDictionary<string, IExecutionParameter> Parameters { get; } 
} 

public interface IDesignerSettings 
{ 
    IDictionary<string, IDesignerParameter> Parameters { get; } 
} 

public class Settings : IExecutionSettings, IDesignerSettings 
{ 
    private Dictionary<string, Parameter> _parameters; 

    // TODO: Implement IExecutionSettings.Parameters 
    // TODO: Implement IDesignerSettings.Parameters 
} 

我要创建这些接口的明确实现(这我知道如何做),但我无法弄清楚如何正确施放字典。

任何帮助将不胜感激。

+0

如果用户向获得的'IDictionary''ies之一添加了一些东西,它是否也应该添加到'Dictionary'中? – Krizz 2012-01-27 14:18:51

+0

是的,这就是意图,但正如Jon Skeet指出的那样,实现某个接口的任何接口都是接口的有效值,但不是底层存储。 – 2012-01-27 14:30:33

回答

4

你不能,因为它不安全。假设您可以将Dictionary<string, MemoryStream>转换为IDictionary<string, IDisposable> - 即使实际字典只能容纳MemoryStream兼容引用,您仍然可以通过后者引用将任何IDisposable值赋予字典。

您可能会创建一个只读字典包装器,它为所有读取委派底层字典,并且在所有写入操作时失败。然后,您可以将这些“查看”字典中的两个包装为Dictionary<string, Parameter>。这会有点痛苦,但可行。在你的情况下,这是否是最合适的方法是另一回事。

也许不是你应该有:

public interface IExecutionSettings 
{ 
    IExecutionParameter this[string key] { get; } 
} 

public interface IDesignerSettings 
{ 
    IDesignerParameter this[string key] { get; } 
} 

你可以很容易地实现这两个内Settings的(明确)的。

+0

这是一个很好的观点!我没有想过。谢谢! – 2012-01-27 14:16:03

+0

这个选择是否会带来任何风险,然后:为这两个创建一个基接口,并设置字典使用该接口作为值类型:'Dictionary '和'interface IParameter:IExecutionParameter,IDesignerParameter',am我在这里有一个良好的轨道? – 2012-01-27 14:21:58

+0

没有。只是意识到这并没有完成任何事情。我可能会检查某个项目是否为这两个属性实现了两个接口,但这很容易失控。我想我会通过索引器保持只读方式,因为这对我的场景会很好。再次感谢! – 2012-01-27 14:24:29

相关问题