给梦一个奔跑的方向!
PDF Print E-mail
User Rating: / 1
PoorBest 
Written by xlingfairy
Thursday, 25 February 2010 14:30
 直接在类里定义 delegate 和 event 很简单, 但是换到接口里,没有转过来弯...尽然不知道要如何处理...
 
对着MSDN上的一篇文章,总算转过来了.
 
 
接口: IFetcher , 基类: FetcherBase , 类 OneDayFetcher
接口定义 IFetcher:
namespace DailyDeals.Common {
 
    public delegate void GetProductsCompleteHandler( IFetcher fetcher );
 
    public interface IFetcher {
        string RetailerName { get; set; }
        string FeedUrl { get; set; }
        int RetailerID { get; set; }
        
        event GetProductsCompleteHandler GetProductsComplete;
 
        List<DailySalesProduct> GetProducts();
    }
}
 
 
基类定义: FetcherBase 实现 IFetcher
 
namespace DailyDeals.Common {
    public abstract class FetcherBase : IFetcher {
        ...
        ...
        #region IFetcher 成员
        public event GetProductsCompleteHandler GetProductsComplete;
        #endregion
 
        protected virtual void OnGetProductsComplete() {
            if(GetProductsComplete != null)
                GetProductsComplete(this);
        }
 
        #region IFetcher 成员
        abstract public List<DailySalesProduct> GetProducts();
        #endregion
    }
}
 
 
类定义 OneDayFetcher, 派生自 FetcherBase
namespace DailyDeals.Fetcher {
    public class OneDayFetcher : FetcherBase {
        ...
        ...
        public override List<DailySalesProduct> GetProducts() {
            ...
            OnGetProductsComplete();
            ...
        }
 
    }
}
 
 
调用:
...
private static void Run() {
Type[] types = Assembly.Load("DailyDeals.Fetcher").GetTypes();
foreach (Type type in types) {
try {
count++;
IFetcher o = (IFetcher)Activator.CreateInstance(type);
ThreadPool.QueueUserWorkItem(new WaitCallback(Fetch), o);
} catch {
count--;
}
}
}
...
private static void Fetch( object state ) {
IFetcher fetcher = (IFetcher)state;
fetcher.GetProductsComplete += new GetProductsCompleteHandler(fetcher_GetProductsComplete);
List<DailySalesProduct> ps = fetcher.GetProducts();
}
...
 
 

Add comment


Security code
Refresh

Popular Contents

Recommend

Site Info

Members : 1
Content : 130
Web Links : 7
Content View Hits : 99685

Links