问题描述
当我用C#编写类时,我不仅经常使用公共API /签名中的接口类型,而且还使用私有成员的类型:
public class Foo {
private readonly IDictionary<string,Bar> m_Bars; // <-- here
public Foo() {
m_Bars = new Dictionary<string,Bar>();
}
}
在某些情况下 我不这样做,主要是在我需要公开一些可变集合的ReadOnly
接口变体时。最常见的示例是将List<T>
公开为IReadOnlyCollection<T>
或IReadOnlyList<T>
;我无法将成员分别设为ICollection<T>
IList<T>
,因为这些接口不会扩展其IReadOnly
对应对象to retain binary backwards compatibility,因此我不得不add a wrapper才能使其正常工作:
public class Foo {
private readonly List<Bar> m_Bars; // <-- not here
public Foo() {
m_Bars = new List<Bar>();
}
public IReadOnlyCollection<Bar> Bars => m_Bars;
}
受保护的实例成员有点像私有成员和公共API之间的中间人,因此,公开接口而不是类的一般好处确实适用。
但是对于私人成员,这是否有帮助/伤害/有所作为?例如,是否在每次访问成员时引入其他类型检查?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)