使用接口作为私有成员的类型有意义吗?

问题描述

当我用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 (将#修改为@)