原谅这个糟糕的头衔,无法用很少的话来解释我的问题。我正在尝试制作一个简单的日历应用程序,这些应用程序已经给出了我迄今为止的一些粗略指导。
我有一个名为 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类型的新对象将创建另一个列表..?我希望有人跟着我嘿......我的头在旋转!
答案 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为前缀。