簡體   English   中英

C#在類和名稱空間中列出,從另一個類訪問它

[英]C# List inside class and namespace, accessing it from another class

請原諒我對C#的一點了解,因為對於某些人來說,這個問題可能很容易,但我無法解決。

我已經嘗試並搜索了許多示例和教程,但是所有這些都只是部分示例,因此我無法正確理解。

我有此類“ FilesDataStruct”:

namespace MYPROJECT.FilesListData
{
    class FilesDataStruct
    {
        public int ID;
        public string Name;
    }
}

和類“ FilesDataClass”:

namespace MYPROJECT.FilesListData
{
    class FilesDataClass
    {
        public List<FilesDataStruct> Files;

        public FilesDataClass()
        {
            Files = new List<FilesDataStruct>();
        }
    }
}

他們使用的名稱空間是“ FilesListData ”。

因此,我進入MYPROJECT的B ”類並聲明:

private FilesDataClass m_ListWorker;

然后將項目添加到我的列表中:

m_ListWorker = new FilesDataClass();

FilesDataStruct item = new FilesDataStruct();

for (int i = 0; i < 10; i++)
{
    item.ID = i;
    item.Name = "Just_Testing";

    m_ListWorker.Files.Add(item);
}

對此進行調試,我可以看到項目已正確添加。

現在,我需要在“ Form1 ”類(或任何其他..)中訪問此列表:

所以我再次聲明:

 private FilesDataClass m_ListWorker;

但是閱讀我發現的示例和教程,我已經做到了:

m_ListWorker = new FilesDataClass(); // this is weird, if I call the class again it's normal to be empty

for (int i = 0; i < m_ListWorker.Files.Count; i++)
{
    Console.WriteLine(m_ListWorker.Files[i].ID);
    Console.WriteLine(m_ListWorker.Files[i].Name);
}

當然,那里什么也沒有。 我猜問題是“ FilesDataClass ”的構造函數,因為每次調用“ new ”時,它將變成一個新的空類...

請向我解釋世界上我做錯了什么,以及如何訪問我的班級以檢索想要的任何班級中的項目...

您需要傳遞對現有類的引用,而不是為其創建新實例。

public class Form1 : Form
{
    FilesDataClass m_ListWorker = null;

    public Form1(FilesDataClass f)
    {
        this.m_ListWorker = f;
    }
}

var newForm = new Form1(m_ListWorker);

您還有第二個問題。 for循環將無法正常工作。 您只需添加10次相同的FilesDataStruct實例...最后,您將擁有10個引用,它們將具有相同的值(在循環的上一迭代中分配的值)。

m_ListWorker = new FilesDataClass();

FilesDataStruct item = new FilesDataStruct();

for (int i = 0; i < 10; i++)
{
    item.ID = i;
    item.Name = "Just_Testing";

    m_ListWorker.Files.Add(item);
}

實例化循環內的類:

m_ListWorker = new FilesDataClass();

for (int i = 0; i < 10; i++)
{
    FilesDataStruct item = new FilesDataStruct();
    item.ID = i;
    item.Name = "Just_Testing";

    m_ListWorker.Files.Add(item);
}

您需要公開B.m_ListWorker(或者更好的是公開屬性)。然后,如果它是實例屬性,則可以使用someInstanceOfB.ListWorker進行訪問;如果是靜態的,則可以使用B.ListWorker進行訪問。

暫無
暫無

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

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