Class 内的列表从接口继承 - 从 class 内添加到列表?

List inside Class Inheriting from Interfaces - Add to list from within class?

请原谅糟糕的标题,不能用这么少的话来解释我的问题。我正在尝试根据一些粗略的指导方针制作一个简单的日历应用程序,这些指导方针让我走到了这一步。

我有一个名为 Apts 的 class,继承自接口 IApts,它本身继承自另一个接口 IApt。我的代码如下:

IApt

public interface IApt
{
    DateTime Start { get; }
    int Length { get; }
    string Description{ get; }
    bool Occurs(DateTime date);
}

IApts

public interface IApts : IList<IApt>
{
    bool Load();
    bool Save();
    IEnumerable<IApt> GetAptsOnDate(DateTime date);
}

Apts (当然要减到最少)

class Apts: IApts
{
    public List<IApt> myAppointments = new List<IApt>();

    public Apts()
    {
        // Constructor must be empty - guideliness
    }

    public bool Load()
    {
        //Code to load appointment data from file to variables below
        string startTime = x;
        string lengthTime = y;
        string description = z;

        IApt loadedAppointment = new IApt(aptStartDate, aptLength, aptDescription);
                myAppointments.Add(loadedAppointment);
    }

#IList Methods
#IEnumerable Methods
}

希望我的代码片段能让您了解我在这里要实现的目标。我将从我的 mainForm 创建一个 Apts class 的实例,以便按如下方式保留我的所有约会:

IApts _Appointments = new Apts();

我现在想做两件事。我想从我的 IApt 类型的 mainForm 添加项目(这甚至可能吗?:S)。我还希望在我创建实例后能够从我的 mainForm 调用我的 Load() 方法,以便用内容将来自简单文本文件存储的约会填充列表 myAppointments。

有人可以告诉我我正在尝试做的事情是否可行吗?其他一切都已就绪,我只需要能够访问创建 Apts 实例时创建的列表,并向其添加 IApt 类型的 objects。

或者创建另一个 class 是否有意义,也许命名为 Apt,因为创建一个新的 object 类型的 Apts 将创建另一个列表..?我希望有人跟着我嘿..我的头在旋转!

public interface IApt
{
    DateTime Start { set;get; }
    int Length { set;get; }
    string Description{ set;get; }
    bool Occurs(DateTime date);
}

将此 属性 添加到接口 IApts

List<IApt> myAppointments {set;get;} 

实现这个接口例如:

public class Apt : IApt
{
    public DateTime Start { set;get; }
    public int Length { set;get; }
    public string Description{ set;get; }
    public bool Occurs(DateTime date){

    }
}

然后

 IApts _Appointments = new Apts();

    IApt apt = new Apt();
    apt.Start=...
    apt.Length=...
    _Appointments.myAppointments.Add(apt);
_Appointments.Load();

不想对您的命名约定做出判断,只要它们在整个代码中保持不变即可,但 public 成员通常是 UpperCamelCase 并且 private 以 _lowerCamelCase 或 lowerCamelCase 为前缀。

您应该创建一个 Add 方法并实现它:

public interface IApts
{
    bool Load();
    bool Save();
    void Add(IApt appointment);
    IEnumerable<IApt> GetAptsOnDate(DateTime date);
}

class Apts: IApts
{
    private List<IApt> myAppointments = new List<IApt>();

    public void Add(IApt appointment)
    {
        this.myAppointments.Add(appointment);
    }

    // rest of class omitted for brevity
}

顺便说一句,您可能想将 myAppointments 设为私有。 public.

你暴露的太多了