首页 > 解决方案 > 有没有办法自动获取对调用构造函数的对象的引用?

问题描述

现在在我的代码中,我有一个抽象类,其中包含一个嵌套类。在实现我的抽象类的每个类的构造函数中,我必须构造嵌套类的实例,并将对当前对象的引用传递给嵌套类,如下所示。

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

    /* 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()
    {
        this.SpecialStuff = new SpecializedClass(this, "stuff"); // <= This is the issue
        // More stuff
    }
}

如您所见,每当我需要调用 时new SpecializedClass(),我都必须传递对 的引用this。有没有办法自动做到这一点,所以继承自的类MainClass不需要继续传递引用?

标签: c#

解决方案


答案基本上是否定的。堆栈帧不包含对调用对象的引用(如果有的话),除非您将它传入或想要遍历堆栈(坏主意),否则根本无法获得它。

然而,在某些情况下,您可以使用表达式树来解决更复杂、更简单的问题。但是,它们在这里几乎不适用,而且无论如何都是可打印的字符。

我想另一种方法是扩展方法,但是您只是在踢球this并无缘无故地创建更多代码

剩下的是实例方法或基类......

最后,虽然很常见,但我会仔细检查您是否确实需要调用对象。这可以轻松解决诸如单一职责原则 (SRP)关注点分离 (SOC)等设计问题

一切都是平等的,如果你需要它,那就把它传进去。


推荐阅读