Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将两个属性链接在一起?_C#_Inheritance_Polymorphism - Fatal编程技术网

C#将两个属性链接在一起?

C#将两个属性链接在一起?,c#,inheritance,polymorphism,C#,Inheritance,Polymorphism,我试图检索一个学生的模块列表,并将它们添加到另一个类的属性中,以便显示它们。我的目标是,当我创建一个人的实例,并且他们的程序具有特定的名称时,它将检索该程序的模块 这是我在Program类中的方法,我尝试从modules类中的ListOfModules方法获取模块 public List<Modules> ModuleList { get { Modules m = new Modules();

我试图检索一个学生的模块列表,并将它们添加到另一个类的属性中,以便显示它们。我的目标是,当我创建一个人的实例,并且他们的程序具有特定的名称时,它将检索该程序的模块

这是我在Program类中的方法,我尝试从modules类中的ListOfModules方法获取模块

    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;}

您或许应该考虑收集。一个方案有许多模块。然后你可以用程序名作为键谢谢你,在你稍微睁开我的眼睛后,我终于可以让它工作了,是的,我知道这看起来很傻,我没有注意到。我尝试了各种各样的随机的东西来让它工作。