c#将两个属性链接在一起
本文关键字:两个 属性 链接 在一起 | 更新日期: 2023-09-27 18:07:22
我试图检索一个学生的模块列表,并将它们添加到另一个类的属性中,以便显示它们。我的目的是,当我创建一个人的实例并且他们的程序有一个特定的名称时,它将检索该程序的模块。
这是我在我的程序类中的方法,我试图从模块类中的ListOfModules方法中获取模块。
public List<Modules> ModuleList
{
get
{
Modules m = new Modules();
if (m.ListOfModules == null)
{
return null;
}
else
{
return m.ListOfModules;
}
}
}
这是Modules类中的ListOfModules方法。
internal List<Modules> ListOfModules
{
get
{
if (_modules == null)
{
return _modules;
}
else
{
return _modules;
}
}
}
,下面是一个如何将模块添加到模块列表的示例。
class CGP : Programmes
{
List<Modules> modules;
public CGP() :base("CGP") //CGP is the name of the programme
{
modules = new List<Modules>();
modules.Add(new Modules("example 1"));
modules.Add(new Modules("example 2"));
}
}
那么,我如何才能在Programme类中获得ModuleList方法,以从modules类中的ListOfModules方法获得此模块列表呢?我知道这些模块被添加到ListOfModules方法,但他们我似乎不知道如何链接它与ModuleList,所以我可以打印出该列表。
我将感谢任何帮助或支持,因为我花了无数的时间试图弄清楚这个问题。抱歉我听起来像个外行。问题的根源似乎是基类中的ModuleList。我也不明白为什么你有两个级别的列表,似乎是完全相同的实现。
class Programme
{
private List<Module> _modules = new List<Module>();
public List<Module> Modules { get { return _moduleList; } }
}
class CGP : Programme
{
public CGP() :base("CGP")
{
Modules.Add(new Module("example 1"));
Modules.Add(new Module("example 2"));
}
}
这看起来特别傻:
internal List<Modules> ListOfModules
{
get
{
if (_modules == null)
{
return _modules;
}
else
{
return _modules;
}
}
}
两种方式返回的都是相同的东西,所以检查是不必要的。它本质上就像这样:
internal List<Modules> ListOfModules { get { return _modules; } }
没有办法像你描述的那样把这些事情直接联系起来。
我建议使用一个临时服务,Person可以调用它来按名称检索模块。
看起来您的问题是列表模块是在CGP子类中声明的,因此程序超类中的ModuleList属性无法访问它。如果您希望programs类中的属性能够返回您在CGP构造函数中添加的模块,那么需要将它们添加到programs类的属性中,可能声明为protected,以便只有子类才能访问它。
还有一些奇怪的事情:为什么你的ModuleList getter创建一个新的模块对象,然后返回它的属性?模块的构造函数是否做一些事情来创建ListOfModules属性底层的数据或从某处检索它?
为什么你的ListOfModules属性检查_modules是否为空,然后返回它是否为空?我将跳过这个和_modules属性,并执行:
internal List<Modules> ListOfModules { get; private set; }