2013-06-04 6 views
-3

У меня в моем проекте около 50 классов. Каждый класс имеет некоторые функции сохранения. Теперь я хочу сохранить данные в некотором требуемом потоке.Итерация по всем классам проекта

EG: I have classes A, B, C, D, E. 

And the sequence of save might be : C, D, E, B, A 

Теперь, когда я имею много классов, поэтому я хочу, чтобы создать цикл для сохранения данных в потоке. Для того, чтобы сделать это я имел в виду, чтобы создать список классов, а затем я могу сделать что-то вроде этого:

List<Classes> list_class = new List[] {C, D, E, B, A}; 
foreach (Classes item in list_class) 
{ 
    item.Save(); 
} 

Можно ли иметь такую ​​функциональность? Если да, то как?

EDIT:

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 
    } 
} 

Резюме: В случае утверждение, каждый класс проверяет, что его экземпляр имеет несколько значений или нет. Тогда, если он имеет некоторые значения, то он вызовет метод сохранения этого класса.

Надеюсь, теперь это ясно.

+8

Ваш вопрос крайне неясен. – SLaks

+0

@SLaks ok ... Я просто хочу узнать, из какого типа может быть сформирован список, чтобы создать список классов в моем проекте, чтобы я мог вызвать функцию сохранения каждого класса, выполнив цикл. – Lucky

+2

Ваш вопрос все еще очень неясен. Вам может понадобиться интерфейс, или отражение, или список делегатов. – SLaks

ответ

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(); 
} 
+1

Спасибо за решение. Но у меня еще одна неприятность. Я также хочу получить доступ к общему свойству классов. Проблема в том, что свойство является статическим. Поэтому я не могу использовать их, используя интерфейсы. Любое решение для этого? – Lucky

Смежные вопросы