我的问题的总结是“我有2个共享一个通用接口的类,但是这两个类在属性方面有不同的行为。一个接口抛出一个异常,如果参数值无效,另一个接口将其内部状态更新为处理无效的值,两个类是否可以共享相同的接口,或者应该定义两个接口,以向开发人员指出两者具有不同的行为?“可以使用相同的接口定义但提供不同的行为吗?
我会尝试用一些代码来澄清。我有界面定义如下。
public interface IStationDictionary { bool this[string stationId] { get; set; } }
和一个实现接口的类,该类用于设置数字IO板上的输出端口。
public class DigitalStationAdapter : IStationDictionary { public bool this[string stationId] { get { return ports[stationId].Value; } set { ports[stationId].Value = value; } } public void AddDigitalStation(string stationId, DigitalIoPort port) { ports.Add(stationId, port); } private IDictionary<string, DigitalIoPort> ports = new Dictionary<string, DigitalIoPort>(); }
我也有记录哪些站有改变,因此这些改变可以propegated到数字IO值的类。
public class StationTransitions : IStationDictionary { public bool this[string stationId] { get { bool result = false; if(changes.ContainsKey(stationId)) result = changes[stationId]; return result; } set { if(!changes.ContainsKey(stationId)) changes.Add(stationId, value); else changes[stationId] = value; } } public IDictionary GetChanges() { IDictionary<string, bool> result = changes; changes = new Dictionary<string, bool> return result; } private IDictionary<string, bool> changes = new Dictionary<string, bool>(); }
所以,虽然这两个类实现相同的接口,如果你试图用的stationID访问索引不在字典DigitalStationAdapter将抛出一个KeyNotFoundException。而StationTransitions将会成功,即不同的行为。这没关系,我认为接口用于定义行为和结构?基思。