直接在类里定义 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();
}
...
| < Prev | Next > |
|---|



