1

我正在尝试实现Windows 更新代理 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 不是很熟悉,所以我不知道我在这里做错了什么。

4

1 回答 1

3

override实现接口时不需要使用。写吧:

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

override从基类继承并“覆盖”基类继承的虚拟(或抽象)方法时使用关键字。有关详细信息,请参阅覆盖

有了接口,你只需要一个匹配的方法。您也可以显式实现接口:

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

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

于 2012-06-19T01:18:22.813 回答