C#将两个属性链接在一起?
我试图检索一个学生的模块列表,并将它们添加到另一个类的属性中,以便显示它们。我的目标是,当我创建一个人的实例,并且他们的程序具有特定的名称时,它将检索该程序的模块 这是我在Program类中的方法,我尝试从modules类中的ListOfModules方法获取模块C#将两个属性链接在一起?,c#,inheritance,polymorphism,C#,Inheritance,Polymorphism,我试图检索一个学生的模块列表,并将它们添加到另一个类的属性中,以便显示它们。我的目标是,当我创建一个人的实例,并且他们的程序具有特定的名称时,它将检索该程序的模块 这是我在Program类中的方法,我尝试从modules类中的ListOfModules方法获取模块 public List<Modules> ModuleList { get { Modules m = new Modules();
public List<Modules> ModuleList
{
get
{
Modules m = new Modules();
if (m.ListOfModules == null)
{
return null;
}
else
{
return m.ListOfModules;
}
}
}
公共列表模块列表
{
得到
{
模块m=新模块();
if(m.ListOfModules==null)
{
返回null;
}
其他的
{
返回m.ListOfModules;
}
}
}
这是Modules类中的ListOfModules方法
internal List<Modules> ListOfModules
{
get
{
if (_modules == null)
{
return _modules;
}
else
{
return _modules;
}
}
}
模块的内部列表
{
得到
{
if(_modules==null)
{
返回模块;
}
其他的
{
返回模块;
}
}
}
下面是一个我如何将模块添加到模块列表的示例
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"));
}
}
class CGP:程序
{
列出模块;
public CGP():base(“CGP”)//CGP是程序的名称
{
模块=新列表();
模块。添加(新模块(“示例1”);
模块。添加(新模块(“示例2”);
}
}
那么,我如何才能在Program类中获取ModuleList方法,从而从modules类中的ListOfModules方法中获取这个模块列表呢?我知道这些模块正在添加到ListOfModules方法中,但是我似乎无法确定如何将其与ModuleList链接,以便打印出该列表
我将感谢任何帮助或支持,因为我花了无数的时间试图弄明白这一点。很抱歉听起来像个业余爱好者 没有直接的方法可以用你描述的方式把这些事情联系起来
我建议使用一个临时服务,用户可以调用该服务来按名称检索模块。看起来您的问题是列表模块是在CGP子类中声明的,因此Programs超类中的ModuleList属性无法访问它。如果希望programs类中的属性能够返回要添加到CGP构造函数中的模块,则需要将它们添加到programs类的属性中,可能声明为protected,以便只有子类可以访问它 还有一些似乎很奇怪的事情: 为什么ModuleList getter创建一个新的Modules对象,然后返回它的属性?模块的构造函数是否做了一些事情来创建ListOfModules属性的基础数据或从某处检索它 为什么ListOfModules属性检查_modules是否为null,然后返回它是否为null?我会跳过它和_modules属性,然后执行以下操作:
internal List<Modules> ListOfModules { get; private set; }
模块的内部列表列表{get;private set;}
问题的根源似乎是基类中的模块列表。我也不明白为什么您有两个级别的列表,它们似乎是完全相同的实现
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"));
}
}
课程计划
{
私有列表_模块=新列表();
公共列表模块{get{return}moduleList;}
}
CGP类:课程
{
公共CGP():基(“CGP”)
{
添加(新模块(“示例1”);
添加(新模块(“示例2”));
}
}
这似乎特别愚蠢:
internal List<Modules> ListOfModules
{
get
{
if (_modules == null)
{
return _modules;
}
else
{
return _modules;
}
}
}
模块的内部列表
{
得到
{
if(_modules==null)
{
返回模块;
}
其他的
{
返回模块;
}
}
}
无论哪种方式,您都返回相同的内容,因此支票是不必要的。基本上与此相同:
internal List<Modules> ListOfModules { get { return _modules; } }
内部模块列表{get{return\u modules;}
您或许应该考虑收集。一个方案有许多模块。然后你可以用程序名作为键谢谢你,在你稍微睁开我的眼睛后,我终于可以让它工作了,是的,我知道这看起来很傻,我没有注意到。我尝试了各种各样的随机的东西来让它工作。