簡體   English   中英

C#:代碼在一個類中有效,但在另一個類中無效

[英]C#: Code works in one class but not in another

解決方案是簡單地使列表靜態。

我在A類中有代碼。在AI類中,有一個按鈕,該按鈕運行代碼以將對象添加到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類添加到列表中?

這可以通過多種方式解決

第一種方式 -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);
}

我個人更喜歡第一種方法,因為新實例可能會消耗額外的內存分配。 希望這可以幫到你。

首先,我假設ClassAClassC是表格嗎?

在按鈕單擊處理程序中,打開ClassC表單,只需將manager成員放入ClassC的構造函數中:

A類:

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();
    }
}

ClassC:

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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM