您的位置:首页 > 编程语言 > Java开发

c# 与java 相同实现 自定义事件的触发及监听

2011-11-17 00:22 483 查看
java

1,先自定义一个事件

public class MyEvent extends java.util.EventObject{
public MyEvent(Object source)
{
super(source);
}
}

2,再自定义一个监听器

public class MyListener implements java.util.EventListener{
//这里是当事件发生后的响应过程
public void EventActivated(MyEvent me)
{
System.out.println("事件已经被触发");
}
}

3,以下这个类为触发事件的事件源

public class MyObject {
private Vector vectorListeners=new Vector();

public synchronized void addMyListener(MyListener ml)
{
vectorListeners.addElement(ml);
}

public synchronized void removeMyListener(MyListener ml)
{
vectorListeners.removeElement(ml);
}

protected void activateMyEvent()
{
Vector tempVector=null;

MyEvent e=new MyEvent(this);

synchronized(this)
{
tempVector=(Vector)vectorListeners.clone();

for(int i=0;i<tempVector.size();i++)
{
MyListener ml=(MyListener)tempVector.elementAt(i);
ml.EventActivated(e);
}
}

}

//定义一个公用方法用于触发事件
public void test()
{
activateMyEvent();
}
}

4,测试类

public class Test {

public static void main(String[] args)
{
MyObject mo=new MyObject();

//注册该事件
mo.addMyListener(new MyListener());

//触发该事件
mo.test();
}
}

c#

interface IEvent
{
object Source { get; set; }
}
interface IListener
{
void EventActivated(IEvent e);
}

class MyEvent : IEvent
{
public MyEvent(object source)
{
_source = source;
}

private object _source;

#region IEvent 成员

public object Source
{
get
{
return _source;
}
set
{
_source = value;
}
}

#endregion
}

class MyListener : IListener
{
#region IListener 成员

public void EventActivated(IEvent e)
{
throw new NotImplementedException();
}

#endregion
}

class MyObject
{
private List<IListener> _listeners = new List<IListener>();

public void addListener(IListener listener)
{
_listeners.Add(listener);
}
public void removeListener(IListener listener)
{
_listeners.Remove(listener);
}
protected void activateEvent()
{
MyEvent e = new MyEvent(this);
foreach (IListener listener in _listeners)
listener.EventActivated(e);
}
public void test()
{
activateEvent();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: