如何为类创建具有相同属性的多个对象,但每个对象的值都不同

时间:2014-09-03 17:12:31

标签: c#

protected void page load()
{
    blick=1;
    j=0;
}

protected button1_click()
{
    bclick=blick+1;
    j=j+1;
    ReferenceDetails[]rfobj=new ReferenceDetails[bclick];
    if(j<=bclick)
    {
        rfobj[j]=new ReferenceDetails();
        rfobj[j].name=txtrfname.text;
        rfobj[j].lastname=txtrflastname.text;
    }
}

protected preview button_click()
{
    Response.write(rfobj[1].name); // HOW i should achieve this
    Response.write(rfobj[2].name);
    //object reference is not set to instance of an object
}

我想为具有相同属性但值不同的同一类创建一个新对象。在按钮上首先单击要创建的一个对象,并根据用户输入的值绑定。

如果再次单击该按钮,则会再次创建一个新对象,该对象具有相同的属性,但当时用户输入的值不同,并且这些值希望与该对应的对象绑定。

然后我想在另一个按钮单击中获取每个新生成的对象及其关联值,以便在Gridview上显示它。但是对象在上面的代码中新生成为rfobj[1], rfobj[2],但是当我转到下一个按钮并访问该值时,它们将为null。

我如何克服它?任何人都可以为我提供这个问题的解决方案吗?

2 个答案:

答案 0 :(得分:3)

每次点击按钮时都会创建新的rfobj数组,所以每次只有最后一个条目

您需要将其移至表单 - 例如&#39; blick&#39;计数器。

答案 1 :(得分:0)

这远离良好的编程技术,可能是你有内存泄漏......

但要解决您的问题,问题是:

当您第二次单击该按钮时,将使用按钮数重新创建数组,但只填充最后一个按钮,之前的按钮将重新保留为null,因为它是一个新对象。

您必须在重新创建之前备份您的引用,然后使用以前创建的对象填充先前的数组插槽...

类似的东西:

形式:

ReferenceDetails[] rfobj;
int bclick = 0;
按钮中的

int old_count = bclick;

bclick=blick+1;
//j=j+1;

ReferenceDetails[] old_rfobj = rfobj;
rfobj = new ReferenceDetails[bclick];

for ( int i = 0; i < old_count; i++ ){

    rfobj[i] = old_rfobj[i];
}

if (j<=bclick) {
    //rfobj[j]=new ReferenceDetails(); you dont need this
    rfobj[bclick-1].name=txtrfname.text;
    rfobj[bclick-1].lastname=txtrflastname.text;
}

这个shold适合你,但你可以尝试理解在后台发生的事情,当创建和释放对象时... new字从系统请求内存......并且这个内存必须在任何时候释放..

祝你好运