gpt4 book ai didi

c# - 在声明中的对象初始化与构造函数中的初始化之间经历不同的行为

转载 作者:可可西里 更新时间:2023-11-01 08:44:24 25 4
gpt4 key购买 nike

这是一个 WinForms C# 应用程序。以下两个片段显示了初始化对象的两种不同方式。他们给出了不同的结果。

这按预期工作:

public partial class Form1 : Form
{
private CameraWrapper cam;
public Form1()
{
cam = new CameraWrapper();
InitializeComponent();
}

这不起作用(详情如下):

public partial class Form1 : Form
{
private CameraWrapper cam = new CameraWrapper();
public Form1()
{
InitializeComponent();
}

CameraWrapper 内部,我使用第三方 SDK 与相机通信。我在 SDK 上注册了一个事件,该事件在结果可用时调用。

在情况 1(构造函数内部初始化)中,一切都按预期工作,CameraWrapper 中的事件处理程序被调用。在情况 2 中,事件处理程序永远不会被调用。

我原以为这两种对象初始化方式是一样的,但好像不是这样。为什么?

这是整个 CameraWrapper 类。事件处理程序应该在调用 Trigger 之后被调用。

class CameraWrapper
{
private Cognex.DataMan.SDK.DataManSystem ds;
public CameraWrapper()
{
ds = new DataManSystem();
DataManConnectionParams connectionParams = new DataManConnectionParams("10.10.191.187");
ds.Connect(connectionParams);

ds.DmccResponseArrived += new DataManSystem.DmccResponseArrivedEventHandler(ds_DmccResponseArrived);
}

public void Trigger()
{
SendCommand("TRIGGER ON");
}

void ds_DmccResponseArrived(object sender, DmccResponseArrivedEventArgs e)
{
System.Console.Write("Num barcodes: ");
System.Console.WriteLine(e.Data.Length.ToString());
}

void SendCommand(string command)
{
const string cmdHeader = "||>";
ds.SendDmcc(cmdHeader + command);
}
}

最佳答案

I thought that these two styles of object initialization were identical, but it seems not to be the case.

不完全是。

在第一种情况下,CameraWrapper 构造函数在 Form 的基类构造函数之后被调用。在第二种情况下,CameraWrapper 构造函数被调用,然后基类构造函数,然后是 Form1 构造函数主体。

Form 构造函数中的某些内容可能会影响 CameraWrapper 构造函数的执行。

关于c# - 在声明中的对象初始化与构造函数中的初始化之间经历不同的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13036107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com