请原谅我对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 ”它都会成为一个新的空类......
请向我解释世界上我做错了什么,以及我应该如何访问我的班级来检索我想要的任何课程中的项目......
答案 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访问它