c# - 有没有办法自动获取对调用构造函数的对象的引用?
问题描述
现在在我的代码中,我有一个抽象类,其中包含一个嵌套类。在实现我的抽象类的每个类的构造函数中,我必须构造嵌套类的实例,并将对当前对象的引用传递给嵌套类,如下所示。
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
不需要继续传递引用?
解决方案
答案基本上是否定的。堆栈帧不包含对调用对象的引用(如果有的话),除非您将它传入或想要遍历堆栈(坏主意),否则根本无法获得它。
然而,在某些情况下,您可以使用表达式树来解决更复杂、更简单的问题。但是,它们在这里几乎不适用,而且无论如何都是可打印的字符。
我想另一种方法是扩展方法,但是您只是在踢球this
并无缘无故地创建更多代码
剩下的是实例方法或基类......
最后,虽然很常见,但我会仔细检查您是否确实需要调用对象。这可以轻松解决诸如单一职责原则 (SRP)和关注点分离 (SOC)等设计问题
一切都是平等的,如果你需要它,那就把它传进去。
推荐阅读
- javascript - 异步功能完成后如何开始执行功能?在这种情况下,承诺不起作用
- python - 自定义包导入问题——属性错误
- c# - System.Numerics.Vector
在大型数据集上 - python - 无法识别 Scrapy crawl -> ModuleNotFoundError: no module named 'win32api'
- python - lemmatize和去除停用词后的频率分布
- c# - EPPlus 创建的 Excel 表格不会将公式传播到新行
- swift - 使用可编码的 Swift JSON 解码找到了一个字符串/数据
- php - 如何将 API 响应分成 2 个数组?
- python - 对不同视图的 Python Django POST 请求
- blockchain - 我可以在以太坊上存储像 excel 文件这样的数据吗?