离开构造函数后重置数据

时间:2015-03-14 19:20:56

标签: c# constructor

我可能是一个非常初学的问题,但我无法弄清楚为什么会这样。我试图通过构造函数传递一个StringBuilder,它通过Debugger我钉了但是只要我在调试器中的最后一步离开这个在不同类中的构造函数,它就会返回null。我知道它是一个引用类型,因此只有一个引用被复制,但即使我通过引用传递它“ref”结果是相同的...也许我弄错了或者还有其他错误...

class DifferentClass
{
    public void Method()
    {
        StringBuilder[] PathtoFiles = new StringBuilder[numberOfImages];

        for (int i = 0; i < numberOfImages; i++)
        {
            PathtoFiles[i] = new StringBuilder();
            // string pattern for correct file naming/saving
            string nameOfFile = string.Format("{0}{1}{2}", adresaPath, i, ".jpg");
            PathtoFiles[i].Append(nameOfFile);
        }

        Pictures picture = new Pictures(ref PathtoFiles);
    }
}

class Pictures
{
    public StringBuilder[] sb;

    public Pictures(ref StringBuilder[] sb)
    {
        this.sb = sb;
    }

    public Pictures()
    {
    }

    public void LoadPictures(ImageList img)
    {
        for (int i = 0; i < sb.Count(); i++)
        {
            img.Images.Add(string.Format("pic{0}", i), Image.FromFile(sb[i].ToString()));
        }
    }
}

根据请求,我这次将在调用LoadPictures方法的类中附上另一段代码:

  class ThirdClass
  {   
    DifferentClass diff = new DifferentClass();
    Pictures picture = new Pictures();

    private void btn_Download_Click(object sender, EventArgs e)
    {
        diff.Method();
        //this is a control data is supposed to be saved in
        picture.LoadPictures(imageList1);
    }
  }

2 个答案:

答案 0 :(得分:0)

public void Method()
{
    // the StringBuilder
    // ...
    Pictures picture = new Pictures(ref PathtoFiles);
}

初始化picture是正确的。但它是一个局部变量,当Method()完成后,您将无法再访问它

您可以修改您的方法以在客户端保持结果变量:

public Pictures Method()
{
    // the StringBuilder
    // ...
    return new Pictures(ref PathtoFiles);
}

客户端

var pics = new DifferentClass().Method();
ImageList imgs = new ImageList();
pics.LoadPictures(imgs);

答案 1 :(得分:0)

嗯,你去了:

class ThirdClass
  {   
    DifferentClass diff = new DifferentClass();
    Pictures picture = new Pictures();

    private void btn_Download_Click(object sender, EventArgs e)
    {
        diff.Method();
        //this is a control data is supposed to be saved in
        picture.LoadPictures(imageList1);
    }
  }

您正在使用默认构造函数。哪个没有设置StringBuilder[] Pictures.sb

当然,假设您重新编辑的代码是 使用的代码。

在这种情况下,你需要弄清楚如何实例化DifferentClass,可能在ThirdClass ctor。也许您希望DifferentClass.Method()返回一个Picture对象,您也可以在ThirdClass构造函数中初始化它。

有几种方法可以做到这一点。由您决定最佳方法。