2014-11-16 7 views
0

Я создаю библиотеку классов с помощью метода, например OnetoTen(), который в основном является циклом for, считая от 1 до 10. То, что я пытаюсь достичь, - это вызвать этот метод из другой программы и вывести то, что число/итерация для цикла цикла в настоящее время.Метод, возвращающий ход цикла

Является ли использование делегатов/событий правильным способом?

+1

- это может быть, в зависимости от того, что вы на самом деле имеете в виду, «сделайте вывод». Обратите внимание, что «вывод» может означать много разных вещей: отображение на консоли, обновление текста на экране, запись в файл и т. Д. Вы уже получили ответ, демонстрирующий использование делегатов, как явного объекта обратного вызова, так и как (событие - это просто абстрактный элемент, позволяющий добавить экземпляр делегата в цепочку делегатов обратного вызова). Если это не то, что вы хотите, вам нужно написать свой вопрос более четко и конкретно. –

+0

Питер, спасибо за ваши отзывы, я обязательно возьму это на борту! – LuxC

ответ

2

Вы можете использовать обратный вызов (делегат) или событие.

Пример использования обратного вызова:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var counter = new Counter(); 

     counter.CountUsingCallback(WriteProgress); 

     Console.ReadKey(); 
    } 

    private static void WriteProgress(int progress, int total){ 
     Console.WriteLine("Progress {0}/{1}", progress, total); 
    } 
} 

public class Counter 
{ 
    public void CountUsingCallback(Action<int, int> callback) 
    { 
     for (int i = 0; i < 10; i++) 
     { 
      System.Threading.Thread.Sleep(1000); 
      callback(i + 1, 10); 
     } 
    } 

} 

Пример использования события: "Является ли использование делегатов/событий правильный путь"

class Program 
{ 
    static void Main(string[] args) 
    { 
     var counter = new Counter(); 
     counter.ProgessTick += WriteProgress; 

     counter.CountUsingEvent(); 

     Console.ReadKey(); 
    } 

    private static void WriteProgress(int progress, int total){ 
     Console.WriteLine("Progress {0}/{1}", progress, total); 
    } 
} 

public class Counter 
{ 
    public event Action<int, int> ProgessTick; 

    public void CountUsingEvent() 
    { 
     for (int i = 0; i < 10; i++) 
     { 
      System.Threading.Thread.Sleep(1000); 
      if (ProgessTick != null) 
       ProgessTick(i + 1, 10); 
     } 
    } 

} 
+0

Спасибо, но когда я должен предпочесть какой вариант? Есть ли какие-либо рекомендации? – KnorxThieus

+1

В этом случае я бы предпочел обратный вызов. Я думаю, что события лучше, если вы не знаете, сколько или сколько подписчиков у вас будет. Этот пример выглядит так, что всегда будет только одна вещь, которая должна быть уведомлена. –

+0

Большое вам спасибо! – KnorxThieus

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