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

时间:2013-04-03 21:56:22

标签: c# inheritance polymorphism

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

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

    public List<Modules> ModuleList
    {
        get
        {
            Modules m = new Modules();

            if (m.ListOfModules == null)
            {
                return null;
            }
            else
            {
                return m.ListOfModules;
            }
        }
    }

这是Modules Class中的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"));
    }
}

那么我怎样才能在Program类中获取ModuleList方法以从Modules类中的ListOfModules方法获取这个模块列表?我知道这些模块正被添加到ListOfModules方法中但我们似乎无法解决如何将它与ModuleList链接以便我打印出该列表。

我会感激任何帮助或支持,因为我花了不少时间试图解决这个问题。对不起,听起来像一个业余爱好者。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

没有直接的方式以你描述的方式链接这些东西。

我建议使用Person可以调用的临时服务来按名称检索模块。

答案 2 :(得分:0)

看起来您的问题是List模块是在CGP子类中声明的,因此Programs超类中的ModuleList属性无法访问它。如果您希望Programs类中的属性能够返回您在CGP构造函数中添加的模块,则需要将它们添加到Programs类的属性中,可能声明为protected,以便只有子类可以访问它

其他一些看似奇怪的事情: 为什么ModuleList getter创建一个新的Modules对象然后返回它的属性? Module的构造函数是否可以创建基于ListOfModules属性的数据或从某个地方检索它的数据?

为什么ListOfModules属性检查_modules是否为null,然后返回它是否为null?我会跳过它和_modules属性并执行:

internal List<Modules> ListOfModules { get; private set; }