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

C#实例化抽象类的嵌套类时如何自动传入父类实例无需手动传this

解决方案

方案1:基类提供受保护的工厂方法

在MainClass中定义受保护的工厂方法,方法内部自动将当前实例作为参数传入SpecializedClass构造函数,子类仅需传入剩余参数即可,无需手动传递this引用。
代码实现示例:

public abstract class MainClass
{
    public SpecializedClass SpecialStuff { get; init; }

    /* General stuff happens here*/

    // 受保护的工厂方法,自动注入当前实例作为parent参数
    protected SpecializedClass CreateSpecialized(object stuff)
    {
        return new SpecializedClass(this, stuff);
    }

    public class SpecializedClass
    {
        private MainClass _parent;

        public SpecializedClass(MainClass parent, object stuff)
        {
            this._parent = parent;
            // Do stuff...
        }

        /* More specialized stuff happens here.*/
    }
}

public class Foo : MainClass
{
    public Foo()
    {
        this.SpecialStuff = CreateSpecialized("stuff");
        // More stuff
    }
}

如果SpecializedClass有多个参数不同的构造重载,可以对应在基类中添加多个不同入参的CreateSpecialized方法,适配不同场景的使用需求。

方案2:基类构造函数统一初始化

如果要求所有子类必须在构造阶段完成SpecialStuff的初始化,可以将实例化逻辑放到基类的构造函数中,子类仅需在调用基类构造时传入stuff参数即可,完全不需要手动处理SpecializedClass的实例化逻辑。
代码实现示例:

public abstract class MainClass
{
    public SpecializedClass SpecialStuff { get; init; }

    // 基类构造统一完成SpecializedClass实例化
    protected MainClass(object stuff)
    {
        SpecialStuff = new SpecializedClass(this, stuff);
    }

    /* General stuff happens here*/

    public class SpecializedClass
    {
        private MainClass _parent;

        public SpecializedClass(MainClass parent, object stuff)
        {
            this._parent = parent;
            // Do stuff...
        }

        /* More specialized stuff happens here.*/
    }
}

public class Foo : MainClass
{
    public Foo() : base("stuff")
    {
        // More stuff
    }
}

方案适用场景

  • 工厂方法方案灵活性更高,适合子类需要控制SpecializedClass实例化时机、或者存在非构造阶段初始化需求的场景
  • 基类构造方案强制度更高,适合所有子类初始化逻辑一致的场景,可以完全避免子类漏传this引用的问题

内容的提问来源于stack exchange,提问作者MechMK1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:15:06