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

标签 c# winforms

这是一个 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/

相关文章:

c# - 检测 Label 的变化

c# - DataGridComboBoxColumn 不同行的不同 ItemsSource

c# - ReportViewer - 以编程方式将报告导出到特定位置,而不显示保存对话框

c# - 需要一种更好的方法来删除字符串中的模式

c# - 从 C# 调用 C++ dll 函数

vb.net - 使用 Entity Framework 和 native sql 从 vb.net 中的 sqlserver 检索数据

asp.net - C# 中这些客户端选项的优缺点是什么? winforms、WPF、Jquery、ASP.NET AJAX 和 Silverlight

.net - 网页在 WebBrowser 上中断,但在 Internet Explorer 上运行正常

c# - WPF 对网格中的单个行列使用 GridSplitter

javascript - 如何使用正确的大小写在 SignalR 中传递复杂对象?