从接口继承的类中的列表 - 从类中添加到列表?

时间:2015-04-09 00:49:40

标签: c# inheritance ienumerable ilist

原谅这个糟糕的头衔,无法用很少的话来解释我的问题。我正在尝试制作一个简单的日历应用程序,这些应用程序已经给出了我迄今为止的一些粗略指导。

我有一个名为 Apts 的类,继承自 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类的实例,以便按如下方式保存我的所有约会:

IApts _Appointments = new Apts();

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

有人可以告诉我,我想要做的事情是否可能?其他一切都已到位,我只需要能够访问创建Apts实例时创建的列表,并向IApt类型添加对象。

OR是否有意义创建另一个类,可能名为Apt,因为创建Apts类型的新对象将创建另一个列表..?我希望有人跟着我嘿......我的头在旋转!

2 个答案:

答案 0 :(得分:1)

您应该创建一个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设为私有。你公开的曝光太多了。

答案 1 :(得分:0)

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();

不希望判断您的命名约定,只要它们在代码中保持不变,但公共成员通常是UpperCamelCase,private是以_lowerCamelCase或lowerCamelCase为前缀。