C# 使用';在另一个构造函数中调用构造函数;这';作为论据

C# 使用';在另一个构造函数中调用构造函数;这';作为论据,c#,C#,我有以下代码 public Insight3DPluginControl(Insight3DPlugin plugin, MapViewModel viewModel) : base(plugin) { InitializeComponent(); RXMouse = new RXMapMouse(this); eob_tool = new EOBTool(RXMouse);

我有以下代码

 public Insight3DPluginControl(Insight3DPlugin plugin, MapViewModel viewModel)
            : base(plugin)
        {
            InitializeComponent();
            RXMouse = new RXMapMouse(this);
            eob_tool = new EOBTool(RXMouse);
         }
我一直在尝试在新的RXMapMouse()中使用“this”,这是由“this”的构造函数调用的。我试图理解这样做的原因,以及设计模式的名称

我知道传递给RXMapMouse()之前的对象已经初始化,但这是否意味着在分配RXMouse字段时更改当前Insight3DPluginControl对象将更改RXMapMouse()内部的对象

关键字“this”是表示当前对象的“变量”

也许这个(:D)会让你更好地理解它:

 public Insight3DPluginControl(Insight3DPlugin plugin, MapViewModel viewModel)
    : base(plugin)
    {
        InitializeComponent();

        Insight3DPluginControl theControl = this;

        RXMouse = new RXMapMouse(theControl);
        eob_tool = new EOBTool(RXMouse);
     }

因此,基本上,“RXMapMouse”需要一个“Insight3DPluginControl”int的实例,它的构造函数和当前代码所在的Insight3DPluginControl正在被发送。

这实际上是相当糟糕的代码:它正在向RXMapMouse传递一个尚未完全初始化的实例。这只是在问问题,真的。你说的还没有完全初始化是什么意思?您的意思是第一个实例在RXMapMouse构造函数中初始化,然后在Insight3DPlugin控件分配中重新定义?或者您的意思是,它只有在RXMapMouse构造函数之前才初始化,
RXMapMouse
中没有进行
Insight3DPluginControl
的初始化,这是唯一的分配。Jeroen提到的事实是,
Insight3DPluginControl
甚至没有完成它的构造函数(
eob_tool
创建),并且它已经发送了自己。明白了,但我不明白它为什么不是一个循环依赖。似乎当对控件的赋值发生时,原始对象的控件发生了变化,依此类推,对于HHMM来说,这不是一个循环依赖,而是一个循环引用。A指的是B,B指的是A,但A不需要在A实例化之前构造B,A在它的构造函数中引用了B。此外,“控件”没有“原始”对象,它只是一个实例的占位符,因此,我们说的是“控件占位符保存了这个实例”。所以控件==这个。我相信您在想,当您将此或控件传递给RXMapMouse构造函数时,它将再次执行Insight3DPluginControl构造函数,但事实并非如此,该构造函数仅在调用new()时执行。挑剔的是,我注意到这不是类内的变量。你不能改变它。变量各不相同。这是一个值,不是一个变量。如果你想挑剔的话,它不是一个值,而是一个语言关键字/常量。