首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在声明中的对象初始化与在构造函数中的初始化之间的不同行为

在声明中的对象初始化与在构造函数中的初始化之间的不同行为
EN

Stack Overflow用户
提问于 2012-10-24 01:35:31
回答 1查看 865关注 0票数 11

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

它的工作方式与预期一致:

代码语言:javascript
复制
public partial class Form1 : Form
{
  private CameraWrapper cam;
  public Form1()
  {
       cam = new CameraWrapper();
       InitializeComponent();           
  }

这不起作用(详细信息如下):

代码语言:javascript
复制
public partial class Form1 : Form
{
  private CameraWrapper cam = new CameraWrapper();
  public Form1()
  {
       InitializeComponent();
  }

CameraWrapper内部,我使用第三方软件开发工具包与摄像头进行通信。我在SDK上注册了一个事件,当结果可用时会调用该事件。

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

我认为这两种类型的对象初始化是相同的,但事实似乎并非如此。为什么?

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

代码语言:javascript
复制
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);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-24 01:39:04

我认为这两种类型的对象初始化是相同的,但事实似乎并非如此。

不完全是。

在第一种情况下,在Form的基类构造函数之后调用CameraWrapper构造函数。在第二种情况下,依次调用CameraWrapper构造函数、基类构造函数和Form1构造函数。

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

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13036107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档