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,所以我可以打印出该列表。

我将感谢任何帮助或支持,因为我花了无数的时间试图弄清楚这个问题。抱歉我听起来像个外行。

c#将两个属性链接在一起

问题的根源似乎是基类中的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; }