C#:代码在一个类中工作,但在另一个类中不起作用

时间:2018-03-01 20:04:58

标签: c#

解决方案是简单地将列表设为静态。

我在类A中有代码。在A类中,我有一个按钮,它运行代码将对象添加到B类的列表中。

在类AI中,然后有另一个按钮来打开一个不同的表单,类C.在类C中,我有一个按钮,它运行与A类中的按钮运行完全相同的代码,但该对象只会在列表中添加到列表中我单击A类中的按钮,C类中的按钮似乎没有做任何事情

A类还包含一个ListBox,它显示了B类列表的内容,尽管我认为这不会影响问题。

A类:

classB manager = new classB();

private void btnAddItem_Click(object sender, EventArgs e)
{
     Contact cnt = new Contact();

     manager.AddToList(cnt);
}

private void btnOpenFormC_Click(object sender, EventArgs e)
{
    classC newForm= new classC();
    newForm.Show();
}

B组:

public List<Customer> CustomerList = new List<Customer>();

public void AddToList(Contact inData)
{
    Customer cm = new Customer();
    cm.Contact = inData;
    cm.Id = GetId();

    CustomerList.Add(cm);
}

C类:

classB manager = new classB();

 private void btnAddItem_Click(object sender, EventArgs e)
 {
     Contact cnt = new Contact();

     manager.AddToList(cnt);
 }

所以我的问题是:如何制作它以便我可以从A类和C类的列表中添加对象?

2 个答案:

答案 0 :(得分:0)

这可以通过多种方式解决

第一种方式 - Singleton

A类

var manager = ClassB.Instance;

private void btnAddItem_Click(object sender, EventArgs e)
{
    Contact cnt = new Contact();
    manager.AddToList(cnt);
}

B类

public class ClassB {
    private static ClassB _Instance;

    public static ClassB Instance {
        get {
            if(_Instance==null) _Instance = new ClassB();
            return _Instance;
        }
    }

    public List<Customer> CustomerList = new List<Customer>();

    public void AddToList(Contact inData)
    {
        Customer cm = new Customer();
        cm.Contact = inData;
        cm.Id = GetId();

        CustomerList.Add(cm);
    }
}

C类

var manager = ClassB.Instance;

private void btnAddItem_Click(object sender, EventArgs e)
{
    Contact cnt = new Contact();
    manager.AddToList(cnt);
}

第二种方式 - 静态客户列表

A类

var manager = new ClassB();

private void btnAddItem_Click(object sender, EventArgs e)
{
    Contact cnt = new Contact();
    manager.AddToList(cnt);
}

B类

public class ClassB {
    public static List<Customer> CustomerList = new List<Customer>();

    public void AddToList(Contact inData)
    {
        Customer cm = new Customer();
        cm.Contact = inData;
        cm.Id = GetId();

        CustomerList.Add(cm);
    }
}

C类

var manager = new ClassB();

private void btnAddItem_Click(object sender, EventArgs e)
{
    Contact cnt = new Contact();
    manager.AddToList(cnt);
}

我个人更喜欢第一种方式,因为新实例可能会消耗额外的内存分配。希望这可以帮到你。

答案 1 :(得分:0)

首先,我假设ClassCmanager是表格?

在按钮点击处理程序中打开ClassC表单,只需将public class ClassA : Form { private classB manager = new classB(); ... private void btnAddItem_Click(object sender, EventArgs e) { Contact cnt = new Contact(); manager.AddToList(cnt); } private void btnOpenFormC_Click(object sender, EventArgs e) { ClassC newForm= new ClassC(manager); newForm.Show(); } } 成员添加到public class ClassC : Form { private ClassB manager; public ClassC(ClassB manager) { this.manager = manager; ... } ... private void btnAddItem_Click(object sender, EventArgs e) { Contact cnt = new Contact(); manager.AddToList(cnt); } } 的构造函数中:

ClassA的:

templates

ClassC:

deploy