这里我有以下代码:
private IList<IState> _states = new List<IState>();
private ReadOnlyCollection<IState> _statesViewer;
public IList<IState> States { get { return _statesViewer; } }
Run Code Online (Sandbox Code Playgroud)
我相信通常最好返回接口而不是具体类本身,但在这种情况下,我不应该设置为States属性的返回类型ReadOnlyCollection吗?
我的图书馆的任何用户都会认为IList如果我将其设置为可以做任何事情,那就意味着添加元素.事实并非如此,我肯定违反了将其暴露为IList的合同.
我对这个观点是对的还是我在这里还有其他的东西?
做任何使API最清晰的事情.如果调用者只需枚举它就可以暴露为IEnumerable<T>,但我不会担心将其暴露为ReadOnlyCollection.当然,您可以仅使用索引器和枚举器声明自定义类型(接口或类)