我正在写一个门面IList<T>
来实现变更跟踪.是否Clear
使用RemoveAt
或Remove
或别的东西完全?我需要知道是否需要设置内部的所有项目跟踪状态,Clear
或者仅在更改跟踪状态时Remove
,并且RemoveAt
就足够了.
同样,确实Add
使用Insert
?难道Remove
或RemoveAt
利用对方?
对此类实现的任何其他输入也是受欢迎的.
编辑:List的扩展方法是使用预先存在的方法还是新代码?我不知道是否需要实施这些.
是否
Clear
使用RemoveAt
或Remove
或别的东西完全?
你不能依赖于IList.Clear
使用IList.RemoveAt
或实现IList.Remove
.具体实现取决于它想做什么.
请注意,您甚至无法真正依赖Clear
实际删除实例中的所有项目.接口不强制执行行为,它实际上不是合同.
对接口究竟是什么有一个很大的误解.你会听到人们说"接口是合同".他们不是.它们只是指定某些方法具有某些签名和返回类型,如果您有一个实现给定接口的对象,您将能够调用它们.而已.对实施或行为无法保证.
此外,依赖于实现细节是一种巨大的代码味道.他们可能随时改变你,而你却不知道导致你的代码失败并且悲惨地死去.不要依赖实现细节.
同样,Add使用Insert吗?
同样,你不能依赖IList.Add
使用IList.Insert
.
难道
Remove
或RemoveAt
利用对方?
你不能依赖它是真的.