工作簿事件和方法之间的歧义同步

时间:2019-04-03 15:37:44

标签: c# excel visual-studio events ambiguity

我收到一个似乎在事件和属性名称之间的歧义错误。我有一个实现Microsoft.Office.Interop.Excel.Workbook接口并用额外的逻辑修饰它的类。该接口是通过Workbook类型的私有变量实现的。我使用Visual Studio快捷方式通过此私有成员实现接口。但是我遇到一些与歧义有关的错误。

例如,有一个名为Sync的属性,其类型为Microsoft.Office.Core.Sync。还有一个称为同步的事件。两者对我来说都是错误。这是代码段:

class WorkbookDecoratorImpl : Workbook
{
   private Workbook _workbook;       
   public Microsoft.Office.Core.Sync Sync => _workbook.Sync;  
   event WorkbookEvents_SyncEventHandler WorkbookEvents_Event.Sync
    {
        add
        {
            _workbook.Sync += value;
        }

        remove
        {
            _workbook.Sync -= value;
        }
    }

我在事件和属性上都收到错误消息,说:

  

“ WorkbookEvents_Event.Sync”和“ _Workbook.Sync”之间的歧义

我在激活时遇到类似的错误,但在这种情况下,仅在事件覆盖时:

event WorkbookEvents_ActivateEventHandler WorkbookEvents_Event.Activate
{
    add
    {
        _workbook.Activate += value;
    }

    remove
    {
        _workbook.Activate -= value;
    }
}

在这种情况下,我得到:

error CS1656: Cannot assign to 'Activate' because it is a 'method group'

注释

Visual Studio似乎已经足够聪明,可以通过为事件添加前缀“ WorkbookEvents_Event”来避免对该事件进行命名。对于Open,我们没有相同的歧义,Visual Studio没有前缀:

public event WorkbookEvents_OpenEventHandler Open

1 个答案:

答案 0 :(得分:0)

我通过在线查看https://bishoponvsto.wordpress.com/category/vsto/vsto-issues/解决了这个特殊情况。我从以下问题中检索了参考:Excel Workbook Activate Event Ambiguity for C# VSTO

在这里,我将为我的具体问题阐明解决方案。对于同步方法:

public Microsoft.Office.Core.Sync Sync => ((_Workbook) _workbook).Sync;

对于同步事件:

event WorkbookEvents_SyncEventHandler WorkbookEvents_Event.Sync
    {
        add
        {
            ((WorkbookEvents_Event) _workbook).Sync += value;
        }

        remove
        {
            ((WorkbookEvents_Event) _workbook).Sync -= value;
        }
    }

激活事件类似于同步事件。