2012-01-27 121 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

相關問題