создание событий в C #, как в Java

1

У меня есть класс в java, который в основном выполняет поиск в асинхронном режиме, и я возвращаю результат через прослушиватель, мне нужно написать эту же процедуру в С#. Я знаю, что есть некоторые различия между java и поэтому не могут писать, я новичок в С# Мне нужен хотя бы горизонт.

public class Operation {

    private List<Operation.Listener> ListEventResult = new ArrayList<Operation.Listener>();     
    public void Search(String word){        
        try {
            Thread.sleep(3000);
        } catch(InterruptedException ex) {
            Thread.currentThread().interrupt();
        }
        if(ListEventResult.size()>0){
            for(Operation.Listener li : ListEventResult){
                li.Result("Result for "+word);                  
            }
        }
    }   
    public void addEventResult(Listener li){
        ListEventResult.add(li);
    }       

    public interface Listener{      
        public void Result(String result);
    }       
}

public class Program {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Operation op = new Operation();
        op.addEventResult(new Operation.Listener() {            
            @Override
            public void Result(String result) {         
                System.out.println(result);
            }
        });
        op.Search("Facebook");
    }
}
Теги:
events

1 ответ

4
Лучший ответ

События и делегаты

События в С# реализуются с делегатами. Класс публикации определяет делегата. Класс подписки выполняет две вещи: во-первых, он создает метод, который соответствует сигнатуре делегата, а затем создает экземпляр этого типа делегата, инкапсулирующий этот метод. Когда событие поднимается, методы класса подписки вызываются через делегат. Метод, обрабатывающий событие, называется обработчиком событий. Вы можете объявить обработчики событий, как и любой другой делегат.

текстовое http://msdn.microsoft.com/en-us/library/orm-9780596521066-01-17.aspx

Вам не нужен список событий, как в java, потому что собственный С# обрабатывает события как коллекцию, что позволяет добавить их с помощью оператора "+"

простой пример вашего кода в С#

class Operation
{
    public delegate void ResultHandler(object Operation, String result);
    public event ResultHandler Result;

    public void Search(String word) {

        Thread.Sleep(3000);
        if (Result != null)            
            Result(this, "Result for " + word);            
    }
}


public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Operation op = new Operation();
        op.Result += op_Result;
        op.Search("Facebook");

    }

    void op_Result(object Operation, string result)
    {
        MessageBox.Show(result);
    }        
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню