2012-06-19 33 views
1

我试图实现Windows Update Agent API异步下载/安装方法来覆盖,但是,我有实现的回调类(IInstallationProgressChangedCallback等)麻烦没有合适的方法找到从互操作界面

下面是一个例子实施不起作用的类 使用System; 使用WUApiLib;

namespace ConsoleApplication1 
{ 
    class DownloadProgressCallback : IDownloadProgressChangedCallback 
    { 
     public override void Invoke(IDownloadJob downloadJob, IDownloadProgressChangedCallbackArgs callbackArgs) 
     { 
      Console.WriteLine("Do something"); 
     } 
    } 
} 

每当我尝试编译包含这个类的一个项目,我得到

ConsoleApplication1.DownloadProgressCallback.Invoke(WUApiLib.IDownloadJob, WUApiLib.IDownloadProgressChangedCallbackArgs)': no suitable method found to override 

仅供参考,这里的接口是如何定义的(元数据):

#region Assembly Interop.WUApiLib.dll, v2.0.50727 
// F:\src\ConsoleApplication1\ConsoleApplication1\obj\x86\Debug\Interop.WUApiLib.dll 
#endregion 

namespace WUApiLib 
{ 
    [InterfaceType(1)] 
    [Guid("8C3F1CDD-6173-4591-AEBD-A56A53CA77C1")] 
    [TypeLibType(384)] 
    public interface IDownloadProgressChangedCallback 
    { 
     void Invoke(IDownloadJob downloadJob, IDownloadProgressChangedCallbackArgs callbackArgs); 
    } 
} 

我对COM/Interop不太熟悉,所以我迷失在这里做错了。

回答

3

实现接口时,不需要使用override。只要写:从基类继承时,和“重写”继承虚拟(或摘要)的基类的方法

public void Invoke(IDownloadJob downloadJob, IDownloadProgressChangedCallbackArgs callbackArgs) 
    { 
     Console.WriteLine("Do something"); 
    } 

override关键字使用。有关详细信息,请参见override

有了接口,您只需要一个匹配方法。你可以明确地实现接口,以及:

void IDownloadProgressChangedCallback.Invoke(IDownloadJob downloadJob, IDownloadProgressChangedCallbackArgs args) 
{ //... 

这可以让你实现的方式,不会“污染”类的公共API,或具有成员两个接口提供了不同的实现接口具有相同的名称和类型。

+0

哦,男孩,我感到很傻!谢谢! – AdmiralNemo

+0

我花了最后一个小时的时间进行故障排除,只是因为VS2005通过执行操作'Implement Interface'自动添加关键字'override'。我喜欢它(MS世界)! 谢谢你的答案 –

相关问题