【问题标题】:creating events in C # like in java在 C# 中创建事件,就像在 java 中一样
【发布时间】:2014-03-12 16:08:07
【问题描述】:

我在 java 中有一个类,它基本上以异步方式执行搜索,我通过侦听器返回结果,我需要在 C# 中编写相同的例程我知道 java 之间存在一些差异,因此无法编写,我我是 c# 的初学者,我至少需要一个视野。

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");
    }
}

【问题讨论】:

标签: c# java events


【解决方案1】:

活动和代表

C# 中的事件是通过委托实现的。发布类定义了一个委托。订阅类做了两件事:首先,它创建一个与委托签名匹配的方法,然后它创建一个封装该方法的委托类型的实例。引发事件时,通过委托调用订阅类的方法。 处理事件的方法称为事件处理程序。您可以像声明任何其他委托一样声明您的事件处理程序。

基于文本的http://msdn.microsoft.com/en-us/library/orm-9780596521066-01-17.aspx

您不需要像在 java 中那样的事件列表,因为自己的 C# 将事件作为一个集合处理,因此可以使用“+”运算符添加它们

一个简单的 C# 代码示例

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

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 2013-01-16
    • 1970-01-01
    相关资源
    最近更新 更多