我的项目中有大约50个课程。每个类都有一些保存功能。现在我想将数据保存在一些必需的流程中。
EG: I have classes A, B, C, D, E.
And the sequence of save might be : C, D, E, B, A
现在因为我有很多类,所以我想创建一个for循环来保存流中的数据。 要做到这一点,我想创建一个类列表,然后我可以做这样的事情:
List<Classes> list_class = new List[] {C, D, E, B, A};
foreach (Classes item in list_class)
{
item.Save();
}
是否可以拥有此类功能?如果是,那么如何?
修改
Below you can see what i want to achieve:
List<?> Saving_Behaviour = new list[];
for (int i = 0; i < Saving_Behaviour.Length; i++)
{
if (((Saving_Behaviour[i])Controller.GetBindingList()).HasValue())
{
(Saving_Behaviour[i]).Save();
//do save
}
}
摘要:在if语句中,每个类都会检查其实例是否具有某些值。然后,如果它有一些值,它将调用该类的save方法。
我希望现在很清楚。
答案 0 :(得分:8)
这正是接口的用途 - 您在对象中具有通用功能,并且在编译时保证该成员已实现。只要每个类 对象实现一个公共接口,就可以轻松地为对象创建容器,例如
// Ensure your objects implement a common interface.
Dogs : ISaveable
Cats : ISaveable
...
// The interface (not shown) has a SaveOrder
Dogs.SaveOrder = 1;
Cats.SaveOrder = 2;
...
// Create a container that is capable of holding items implementing ISaveable
List<ISaveable> saveItems = new List<ISaveable>();
...
// Add your items to your container
saveItems.Add(Dogs);
saveItems.Add(Cats);
...
// When it's time to save, simply enumerate through your container
foreach(var item in saveItems.OrderBy(q=>q.SaveOrder))
{
// The interface guarantees that a Save method exists on each object
item.Save();
}