锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久96国产精品久久久,亚洲欧美日韩久久精品,精品无码久久久久久久久久http://www.shnenglu.com/guojingjia2006/category/15047.htmlHappy codingzh-cnThu, 30 Sep 2010 11:52:31 GMTThu, 30 Sep 2010 11:52:31 GMT60c# 浜嬩歡璁よ瘑http://www.shnenglu.com/guojingjia2006/archive/2010/09/30/128126.html灝忔灉瀛?/dc:creator>灝忔灉瀛?/author>Thu, 30 Sep 2010 06:17:00 GMThttp://www.shnenglu.com/guojingjia2006/archive/2010/09/30/128126.htmlhttp://www.shnenglu.com/guojingjia2006/comments/128126.htmlhttp://www.shnenglu.com/guojingjia2006/archive/2010/09/30/128126.html#Feedback0http://www.shnenglu.com/guojingjia2006/comments/commentRss/128126.htmlhttp://www.shnenglu.com/guojingjia2006/services/trackbacks/128126.htmlclass MailManager
    {
        
public class MailEventArgs : EventArgs
        {
            
public MailEventArgs(
                String from,
                String to,
                String subject,
                String body)
            {
                
this.from = from;
                
this.to = to;
                
this.subject = subject;
                
this.body = body;
            }
            
public readonly String from, to, subject, body;
        }
        
public delegate void MailEventHandler(Object sender, MailEventArgs e);
        
public event MailEventHandler MailMsg;
        
protected virtual void OnMailMsg(MailEventArgs e)
        {
            
if (MailMsg != null)
            {
                MailMsg(
this, e);
            }
        }
        
public virtual void SimulateArrivingMsg(String from, String to, String subject, String body)
        {
            MailEventArgs e 
= new MailEventArgs(from, to, subject, body);
            OnMailMsg(e);
        }
    }
浠ヤ笂鏄竴涓簨浠剁被鍨嬪畾涔夛紝綆鍗曟楠?
1.瀹氫箟涓涓被鍨嬶紝淇濆瓨鎵鏈変紶閫掑弬鏁般?br>.net妗嗘灦瑙勫畾鎵鏈夌殑淇℃伅綾誨瀷緇ф壙浜嶦ventArgs,綾誨瀷鍚嶇О浠ventArgs緇撴潫,EventArgs鍘熷瀷濡備笅:
[Serializable]
public class EventArgs
{
    public static readonly EventArgs Empty = new EventArgs();
    public EventArgs(){};
}
鍙湁涓涓潤(rùn)鎬佺殑Empty鎴愬憳,鍥犱負(fù)浜嬩歡涓湁浜涗笉闇瑕侀澶栫殑鍙傛暟淇℃伅錛屾墍浠ュ彧瑕佹彁渚汦ventArgs.Empty,涓嶉渶瑕佸湪鏋勯犳柊鐨勫璞?br>2.瀹氫箟涓涓鎵樼被鍨?鎸囧畾浜嬩歡瑙﹀彂鏃惰皟鐢ㄧ殑鍑芥暟鍘熷瀷
public delegate void MailEventHandler(Object sender, MailEventArgs e);
濡傛灉浜嬩歡涓茍娌℃湁棰濆鐨勪紶閫掍俊鎭?鍒欏彲浠ヤ嬌鐢⊿ystem.EventHandler,鍘熷瀷涓?br>public delegate void EventHandler(Object sender,EventArgs e);
3.瀹氫箟涓涓簨浠舵垚鍛?br>public event MailEventHandler MailMsg;
4.瀹氫箟鍙椾繚鎶ょ殑铏氭柟娉曪紝閫氱煡浜嬩歡鐧昏瀵硅薄
protected virtual void OnMailMsg(MailEventArgs e);
5.瀹氫箟椹卞姩浜嬩歡鏂規(guī)硶
public virtual void SimulateArrivingMsg(String from, String to, String subject, String body);

娣卞叆鐞嗚В浜嬩歡
褰撶紪璇戝櫒閬囧埌
public event MailEventHandler MailMsg;
浼?xì)漶旂?涓瀯閫?涓涓鏈夊鎵樼被鍨嬶紝鍙?qiáng)add鍜宺emove鏂規(guī)硶
private MailEventHandler MailMsg;
[MethodImplAttribute(MethodImplOptions.Synchronized)]
public virtual void add_MailMsg(MailEventHandler handler)
{
     MailMsg = (MailEventHandler)Delegate.Combine(MailMsg, handler);
}
[MethodImplAttribute(MethodImplOptions.Synchronized)]
public virtual void remove_MailMsg(MailEventHandler handler)
{
     MailMsg = (MailEventHandler)Delegate.Remove(MailMsg, handler);
}
閫氳繃MailMsg鍐卂prev瀛楁鍙互灝嗘坊鍔犵殑娉ㄥ唽瀵硅薄淇濆瓨

渚﹀惉浜嬩歡
class Fax
    {
        public Fax(MailManager mm)
        {
            mm.MailMsg += new MailManager.MailEventHandler(FaxMsg);
        }
        private void FaxMsg(Object sender, MailManager.MailEventArgs e)
        {

        }
        public void UnRegister(MailManager mm)
        {
            MailManager.MailEventHandler callback = new MailManager.MailEventHandler(FaxMsg);
            mm.MailMsg -= callback;
        }
    }

娉ㄦ剰,褰撲竴涓璞′粛鐒剁櫥璁版湁鍙﹀涓涓璞$殑浜嬩歡錛岃瀵硅薄灝變笉鍙兘瀵瑰瀮鍦懼洖鏀訛紝濡傛灉鎴戜滑綾誨疄鐜頒簡(jiǎn)IDisposable鎺ュ彛錛岄偅鎴戜滑搴旇鍦?br>Dispose鐞嗘敞閿鎵鏈夌櫥璁頒簨浠?br>
鏄劇ず鎺у埗浜嬩歡娉ㄥ唽
private MailEventHandler mailMsgEventHandlerDelegate;
        public event MailEventHandler MailMsg
        {
            add
            {
                mailMsgEventHandlerDelegate =(MailEventHandler)Delegate.Combine(mailMsgEventHandlerDelegate, value);
            }
            remove
            {
                mailMsgEventHandlerDelegate = (MailEventHandler)Delegate.Remove(mailMsgEventHandlerDelegate, value);
            }
        }
        protected virtual void OnMailMsg(MailEventArgs e)
        {
            if (MailMsg != null)
            {
                mailMsgEventHandlerDelegate(this, e);
            }
        }

鏉ヤ唬鏇?/span>public event MailEventHandler MailMsg;瀹氫箟

褰撲竴涓被鍨嬩腑鍚湁澶氫釜浜嬩歡鏃訛紝鐢變簬姣忎釜浜嬩歡浜嬩緥澹版槑閮藉皢浜х敓濮旀墭瀛楁錛屾墍浠ユ帹鑽?/span> 涓嶈鎻愪緵鍏叡鐨勪簨浠舵垚鍛樺彉閲忥紝浣跨敤浜嬩歡璁塊棶鍣ㄦ浛鎹㈣繖浜涘彉閲?br>
class EventHandlerSet:IDisposable
    {
        private Hashtable events = new Hashtable();
        public virtual Delegate this[Object eventKey]
        {
            get
            {
                return (Delegate)events[eventKey];
            }
            set
            {
                events[eventKey] = value;
            }
        }
        public virtual void AddHandler(Object eventKey,Delegate handler)
        {
            events[eventKey] = Delegate.Combine((Delegate)events[eventKey], handler);
        }
        public virtual void RevHandler(Object eventKey, Delegate handler)
        {
            events[eventKey] = Delegate.Remove((Delegate)events[eventKey], handler);
        }
        public virtual void Fire(Object eventKey, Object sender, EventArgs e)
        {
            Delegate d = (Delegate)events[eventKey];
            if (d != null)
                d.DynamicInvoke(new Object[]{sender,e});
        }
        public void Dispose()
        {
            events = null;
        }
        public static EventHandlerSet Synchronized(EventHandlerSet eventHandlerSet)
        {
            if (eventHandlerSet == null)
                throw new ArgumentNullException("eventHandlerSet");
            return new SynchronizedEventHandlerSet(eventHandlerSet);
        }
        public class SynchronizedEventHandlerSet : EventHandlerSet
        {
            private EventHandlerSet eventHandlerSet;
            public SynchronizedEventHandlerSet(EventHandlerSet eventHandlerSet)
            {
                this.eventHandlerSet = eventHandlerSet;
                Dispose();
            }
            public override Delegate this[object eventKey]
            {
                [MethodImpl(MethodImplOptions.Synchronized)]
                get
                {
                    return eventHandlerSet[eventKey];
                }
                set
                {
                    eventHandlerSet[eventKey] = value;
                }
            }
            [MethodImpl(MethodImplOptions.Synchronized)]
            public override void AddHandler(object eventKey, Delegate handler)
            {
                eventHandlerSet.AddHandler(eventKey, handler);
            }
            [MethodImpl(MethodImplOptions.Synchronized)]
            public override void RevHandler(object eventKey, Delegate handler)
            {
                eventHandlerSet.RevHandler(eventKey, handler);
            }
            [MethodImpl(MethodImplOptions.Synchronized)]
            public override void Fire(object eventKey, object sender, EventArgs e)
            {
                eventHandlerSet.Fire(eventKey, sender, e);
            }
        }
    }
    class TypeWithLotsEvents
    {
        protected EventHandlerSet eventSet = EventHandlerSet.Synchronized(new EventHandlerSet());
        protected static readonly Object fooEventKey = new Object();
        public class FooEventArgs : EventArgs { };
        public delegate void FooEventHandler(Object sender, FooEventArgs e);
        public event FooEventHandler Foo
        {
            add
            {
                eventSet.AddHandler(fooEventKey, value);
            }
            remove
            {
                eventSet.AddHandler(fooEventKey, value);
            }
        }
        protected virtual void OnFoo(FooEventArgs e)
        {
            eventSet.Fire(fooEventKey, this, e);
        }
        public void SimulateFoo()
        {
            OnFoo(new FooEventArgs());
        }

    }
浠ヤ笂鏄痬icrosoft .net 妗嗘灦璁捐涓涓猠xample,濡傛灉璁捐璇ョ浜嬩歡綾誨瀷,鍏朵腑緇欏嚭浜?jiǎn)EventHandlerSet鐨勫疄鐜幫紝
.net妗嗘灦涓篃鏈夌被浼肩殑浜嬩歡 EventHandlerList,浣嗘槸璁塊棶鏁堢巼鍜岀嚎紼嬪悓姝ユ湁緙洪櫡錛屾墍浠ユ湁闇瑕佹垜浠嚜宸辨彁渚?br>EventHandlerSet瀹炵幇.璇︽儏璇峰弬鑰僲icrosoft .net 妗嗘灦璁捐


]]>
c# 濮旀墭璁よ瘑http://www.shnenglu.com/guojingjia2006/archive/2010/09/29/128068.html灝忔灉瀛?/dc:creator>灝忔灉瀛?/author>Wed, 29 Sep 2010 09:24:00 GMThttp://www.shnenglu.com/guojingjia2006/archive/2010/09/29/128068.htmlhttp://www.shnenglu.com/guojingjia2006/comments/128068.htmlhttp://www.shnenglu.com/guojingjia2006/archive/2010/09/29/128068.html#Feedback0http://www.shnenglu.com/guojingjia2006/comments/commentRss/128068.htmlhttp://www.shnenglu.com/guojingjia2006/services/trackbacks/128068.html.net妗嗘灦涓?c#涓哄洖璋冨嚱鏁版彁渚涗簡(jiǎn)濮旀墭鐨勭被鍨嬪畨鍏ㄦ満鍒?涓嬮潰鏄0鏄庯紝鍒涘緩鍜屼嬌鐢?/span>
namespace CSharpDotNet
{
    
class Set
    {
        
public Set(Int32 numberItems)
        {
            items 
= new Object[numberItems];
            
for (Int32 i = 0; i < numberItems; i++)
                items[i] 
= i;
        }
        
private Object[] items;
        
public delegate void FeedBack(Object value, Int32 item, Int32 numberItems);
        
/*public FeedBack:System.MulticastDelegate{
            public FeedBack(Object target,Int32 methodPtr);
            public virtual void Invoke(Object value, Int32 item, Int32 numberItems);
            public virtual IAsyncResult BeginInvoke(Object value, Int32 item, Int32 numberItems,
                    AsyncCallback callback,Object object);
            public virtual IAsyncResult EndInvoke(IAsyncResult result);
        }
*/

        
public void ProcessItems(FeedBack feedback)
        {
            
for (Int32 i = 0; i < items.Length; i++)
            {
                
if (feedback != null)
                {
                    feedback(items[i], i 
+ 1, items.Length);
                }
            }
        }

    }
    
class Program
    {
        
static void StaticCallbacks()
        {
            Set setOfItems 
= new Set(5);
            setOfItems.ProcessItems(
new Set.FeedBack(Program.FeedBackToConsole));
        }
        
static void FeedBackToConsole(Object value, Int32 item, Int32 numberItems)
        {
            Console.WriteLine(
"{0},{1},{2}", value, item, numberItems);
        }
        
static void InstanceCallbacks()
        {
            Set setOfItems 
= new Set(5);
            Program p 
= new Program();
            setOfItems.ProcessItems(
new Set.FeedBack(p.FeedBackToMsg));
        }
        
private void FeedBackToMsg(Object value, Int32 item, Int32 numberItems)
        {
            Console.WriteLine(
"msg");
        }
        
static void Main(string[] args)
        {
            StaticCallbacks();
            InstanceCallbacks();
        }
    }
}

涓婁緥鏄劇ず浜?jiǎn)鋴社敤濮旀墭濡備綍闈?rùn)鎬佸洖璋冨拰闈為潤(rùn)鎬佸洖璋冩柟娉?褰撳0鏄?br>
public delegate void FeedBack(Object value, Int32 item, Int32 numberItems);
寰蔣緙栬瘧鍣ㄤ負(fù)鍏朵駭鐢熷涓嬪畾涔夛細(xì)
public FeedBack:System.MulticastDelegate{
       public FeedBack(Object target,Int32 methodPtr);
       public virtual void Invoke(Object value, Int32 item, Int32 numberItems);
       public virtual IAsyncResult BeginInvoke(Object value, Int32 item, Int32 numberItems,
                    AsyncCallback callback,Object object);
       public virtual IAsyncResult EndInvoke(IAsyncResult result);
}


鍥犱負(fù)濮旀墭澹版槑涓簆ublic,鎵浠ヤ細(xì)浜х敓public綾?鍙互鍦ㄤ換浣曠被瀹氫箟鐨勫湴鏂瑰0鏄庡鎵橈紝濮旀墭鏈川鏄竴涓被錛屽洜涓哄鎵樼戶(hù)鎵?/span>System.MulticastDelegate錛?br>鎵浠ヤ細(xì)緇ф壙鍏剁浉搴斿瓧孌碉細(xì)
_target,_methodPtr,_prev.

public FeedBack(Object target,Int32 methodPtr);鏋勯犲嚱鏁板寘鍚袱涓弬鏁?target鍜宮ethodPtr,涓涓璞″紩鐢ㄥ拰涓涓寚鍚戝洖璋冨嚱鏁扮殑鏁存暟錛?br>浣嗘槸鎴戜滑鏋勯犵殑鏃跺欏彧鏄粰浜?span style="color: #000000;">Program.FeedBackToConsole榪欐牱鐨勫鹼紝鍏跺疄鏄紪璇戝櫒涓烘垜浠仛浜?jiǎn)宸ヤ綔锛屽畠鐭ラ亾鎴戜滑鍦ㄦ瀯閫犲鎵橈紝瀹冧細(xì)鍒嗘瀽婧愪唬鐮佺煡閬撴垜浠?br>寮曠敤鐨勬槸鍝釜瀵硅薄鍜屽摢涓柟娉?br>
褰撳鎵樿皟鐢ㄧ殑鏃跺?/span>feedback(items[i], i + 1, items.Length);瀹炶川鏄?/span>feedback.Invoke(items[i], i + 1, items.Length);涓嶈繃c#涓嶅厑璁?br>鏄劇ず璋冪敤璇ユ柟娉?褰搃nvoke璋冪敤鐨勬椂鍊?瀹冧嬌鐢╛target,_methodPtr鏉ユ寚瀹氬璞¤皟鐢ㄧ殑鏂規(guī)硶錛宨nvoke鏂規(guī)硶鐨勭鍚嶅拰澹版槑鐨勫鎵樼鍚嶄竴鑷?br>
System.MulticastDelegate  System.Delegate,鍓嶈呯戶(hù)鎵夸笌鍚庤咃紝寰蔣緙栬瘧鍣ㄤ駭鐢熺殑濮旀墭閮芥槸緇ф壙涓?/span>System.MulticastDelegate,浣嗘槸鎴戜滑鏈変簺鏃跺?br>浼?xì)閬囧?/span>System.Delegate,System.Delegate鎻愪緵浜?jiǎn)涓や釜闈?rùn)鎬佹柟娉曪紝Combine鍜孯emove錛屽叾鍙傛暟閮芥槸Delegate綾誨瀷錛屾墍浠ユ垜浠彲浠ヤ紶閫?/span>MulticastDelegate
緇欏畠

鍏充簬濮旀墭鐨勫垽絳?br>Delegate閲嶅啓浜?jiǎn)Object鐨凟quals鏂規(guī)硶錛屽鏋淿target鍜宊methodPtr鏄惁鎸囧悜鍚屾牱鐨勫璞″拰鏂規(guī)硶錛岃繑鍥瀟rue
MulticastDelegate閲嶅啓浜?jiǎn)Delegate鐨?/span>Equals鏂規(guī)硶,鍦╠elegate涔嬩笂錛岃繕瑕佹瘮杈僟prev

濮旀墭閾?br>
MulticastDelegate鐨刜prev淇濆瓨?shù)簡(jiǎn)涓嬩竴涓鎵樼殑搴旂敤,浣垮緱澶氫釜濮旀墭瀵硅薄鍙互緇勬垚涓涓摼琛?/span>
Delegate瀹氫箟浜?jiǎn)涓変釜闈?rùn)鎬佹柟娉?
public static Delegate Combine(Delegate tail,Delegate head);
public static Delegate Combine(
Delegate[] delegateArray);
public static Delegate Remove(Delegate source,Delegate value);

class FeedBack:
MulticastDelegate{
     public void virtual Invoke(
Object value, Int32 item, Int32 numberItems){
          if(_prev!=null)_prev.Invoke(value,item,numberItems);
          _target.methodPtr(value,item,numberItems);
    }
}

鍙互鐪嬪嚭錛屽綋濮旀墭閾捐皟鐢ㄧ殑鏃跺欙紝濡傛灉鍥炶皟鍑芥暟鏈夎繑鍥炲鹼紝灝嗗彧淇濈暀鏈鍚庝竴涓鎵樿皟鐢ㄧ殑榪斿洖鍊鹼紝鑰屼笖閾捐〃灝鵑儴鐨?br>濮旀墭鍏堣皟鐢紝閫掑綊璋冪敤

c#涓噸杞戒簡(jiǎn)-=,+=,鍙互鏂逛究瀹炵幇濮旀墭閾劇殑鎿嶄綔錛屽叾瀹炶川鏄皟鐢ㄤ簡(jiǎn)浠ヤ笂涓変釜闈?rùn)鎬佸嚱鏁板疄鐜?鍚屾椂涓轟簡(jiǎn)澧炲姞瀵瑰鎵樼殑鎺у埗錛?br>
MulticastDelegate鎻愪緵浜?br>public virtual Delegate[] GetInvocationList();
榪斿洖濮旀墭閾劇殑鏁扮粍錛屽彲浠ユ搷鎺ч噷闈㈢殑姣忎釜濮旀墭瀵硅薄銆?br>
(鍏蜂綋璇峰弬鑰僊icrosoft.Net 妗嗘灦璁捐)




]]>
少妇人妻88久久中文字幕| 91精品日韩人妻无码久久不卡| 狠狠色丁香婷婷综合久久来| 久久久久久伊人高潮影院| 久久精品成人免费观看97| 久久久精品免费国产四虎| 久久99亚洲网美利坚合众国| 久久香蕉国产线看观看精品yw| 一本色综合久久| 亚洲国产精品成人久久蜜臀| 久久久久久无码国产精品中文字幕| www性久久久com| 99热精品久久只有精品| 精品久久久久久久久久久久久久久 | 久久久久亚洲AV无码网站| 日本五月天婷久久网站| 久久精品亚洲AV久久久无码| 久久久久亚洲AV无码专区首JN| 久久99热这里只有精品国产| 久久综合香蕉国产蜜臀AV| jizzjizz国产精品久久| 99久久精品免费看国产免费| 久久精品国产一区二区电影| 久久无码AV中文出轨人妻| 成人综合久久精品色婷婷| 久久久久免费精品国产| 国产精品美女久久久m| 精品国产青草久久久久福利| 久久人人爽人人人人片av| 久久久久99精品成人片试看| 久久精品九九亚洲精品天堂| 久久国产精品免费| 久久婷婷五月综合色奶水99啪| 伊人久久综在合线亚洲2019 | 久久91精品国产91| 国产精品无码久久综合| 久久久久久国产精品无码下载| AV无码久久久久不卡蜜桃| 久久不射电影网| 亚洲中文字幕无码久久综合网| 中文字幕久久欲求不满|