C#:创建子对象的父列表类

问题描述

我从 C# 代码开始...

我想创建一个名为“VolumeList”的类,它是一个“Volume”对象列表。

就像这样:

public class Volume
{
    private string name;

    public Volume(string name)
    {
        this.name = name;
    }

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public static List<Volume> VolumeList { get; set; } = new List<Volume>();
}

但是当我这样做时,我无法直接访问 VolumeList。我必须用 Volume.VolumeList调用它...(这不合逻辑...)我想要这样的东西:

VolumeList.Current.Name (it should return the name of the current volume)

VolumeList.Last.Name (it should return the name of the last volume of the list)

VolumeList.Add = ... (it adds a new volume to the VolumeList)

所以我也想要 IEnumerable 属性(我认为就是这个名字..)。

请您帮我创建正确的类层次结构,并向我展示如何使用列出的(“当前”、“最后”...)属性访问存储在 VolumeList 中的卷对象?

例如,如果我在 ComboBox 中加载我的 VolumeList,并且我选择了一个 Volume,这个 Volume 在我的应用程序中始终会获得“Current”属性

提前致谢。

解决方法

在基本 OOP 中,类的实例无法访问静态方法或属性。它们是在编译时创建的。我们必须像访问常量变量一样访问它们,使用类名作为命名空间幻觉。您需要的是删除静态声明并执行此操作。您也不需要 this 关键字。 C# 很聪明地知道您要访问的内容

public class Volume {
    private string _name;

    public Volume(string name) {
        _name = name;
    }
    
    public string Name {
        get { return _name; }
        set { _name = value; }
    }
   
    public List<Volume> VolumeList = new List<Volume>();

}

然后您可以使用 LINQ 来操作卷列表中的项目。使用 LINQ TUTORIAL 了解 LINQ 的工作原理。

用法

Volume vol = new Volume("First Volume Object");
vol.VolumeList.Add(new Volume("First Sub Volume"));
vol.VolumeList.Add(new Volume("Second Sub Volume"));
        
Console.WriteLine(vol.VolumeList.First().Name);
Console.WriteLine(vol.VolumeList.Last().Name);