You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让抽象父类访问容器类的私有成员且不暴露私有嵌套类?

如何让抽象父类访问容器类的私有成员且不暴露私有嵌套类?

嘿,这个问题我之前也纠结过,刚好有个很优雅的解决办法——利用C#的显式接口实现+私有嵌套接口,既能让父类拿到需要的成员,又完全不会暴露给子类!

先理清楚你的核心诉求:

  • 私有嵌套类PrivateThing绝对不能暴露给派生类
  • ThingContainer作为给派生类的操作入口,只能开放指定方法(比如AddThing)
  • 父类ParentClass需要访问ThingContainer里的Things集合,但不能让派生类看到这个集合

具体实现步骤如下:

  1. 在ParentClass内部定义一个私有嵌套接口,把父类需要访问的成员声明在里面
  2. 让ThingContainer显式实现这个私有接口
  3. 父类在需要访问Things时,将ThingContainer实例转换为这个私有接口来调用成员

修改后的完整代码如下:

public abstract class ParentClass
{
    // 新增私有嵌套接口,仅父类可见
    private interface IThingContainerInternal
    {
        IReadOnlyList<PrivateThing> Things { get; }
    }

    private sealed class PrivateThing { }

    protected sealed class ThingContainer : IThingContainerInternal
    {
        private List<PrivateThing> _things = new();

        // 显式实现私有接口,派生类无法访问这个成员
        IReadOnlyList<PrivateThing> IThingContainerInternal.Things => _things;

        public void AddThing()
        {
            _things.Add(new PrivateThing());
        }
    }

    private readonly List<ThingContainer> _thingContainers = new();

    protected void Setup(Action<ThingContainer> setupThings)
    {
        var container = new ThingContainer();
        setupThings(container);
        _thingContainers.Add(container);
    }

    public void ProcessThings()
    {
        // 通过私有接口访问Things,派生类完全看不到这个逻辑
        foreach (var thing in _thingContainers.SelectMany(static b => ((IThingContainerInternal)b).Things))
            Console.WriteLine(thing.ToString());
    }
}

public sealed class DerivedClass : ParentClass
{
    public DerivedClass()
    {
        Setup(static things =>
        {
            things.AddThing(); // 只能调用公开的AddThing方法,看不到Things集合
            // things.Things 这里会编译报错,完美符合需求
        });
    }
}

这个方案的优势在于:

  • 私有接口IThingContainerInternal仅在ParentClass内部可见,派生类完全感知不到它的存在
  • 显式实现的接口成员不会成为ThingContainer的公共/受保护成员,派生类无法访问
  • PrivateThing始终保持私有,完全不会泄露给外部

备注:内容来源于stack exchange,提问作者user21691167

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 14:59:34