C#列出类和命名空间,从另一个类访问它

时间:2017-11-04 11:28:51

标签: c# c#-4.0 c#-3.0 c#-2.0

请原谅我对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 ”它都会成为一个新的空类......

请向我解释世界上我做错了什么,以及我应该如何访问我的班级来检索我想要的任何课程中的项目......

2 个答案:

答案 0 :(得分:1)

您需要传递对现有类的引用,而不是创建它的新实例。

public class Form1 : Form
{
    FilesDataClass m_ListWorker = null;

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

var newForm = new Form1(m_ListWorker);

你还有第二个问题。那个for循环不会像你期望的那样工作。您只需添加相同的FilesDataStruct实例10次...最后,您有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);
}

答案 1 :(得分:0)

你需要将B.m_ListWorker公开(或者更好,公共属性)。然后你可以将它作为someInstanceOfB.ListWorker访问它,如果它是一个实例属性,或者如果它是静态的那么可以作为B.ListWorker访问它