我得到一个模糊错误,似乎是在事件和属性名称之间。我有一个类正在实现Microsoft.Office.Interop.Excel.Workbook
接口并用额外的逻辑进行装饰。该接口通过Workbook类型的私有变量实现。我使用Visual Studio快捷方式通过此私有成员实现接口。但我得到一些与歧义有关的错误。
例如,有一个名为Sync的属性,其类型为Microsoft.Office.Core.Sync。还有一个名为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'之间的歧义
我在Activate中遇到类似的错误,但在这种情况下只在事件覆盖上:
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
我在网上查看了这个特殊情况:https://bishoponvsto.wordpress.com/category/vsto/vsto-issues/。我从这个问题中找到了参考文献:Excel Workbook Activate Event Ambiguity for C# VSTO。
我会在这里解决我的具体问题的解决方案。对于Sync方法:
public Microsoft.Office.Core.Sync Sync => ((_Workbook) _workbook).Sync;
对于Sync事件:
event WorkbookEvents_SyncEventHandler WorkbookEvents_Event.Sync
{
add
{
((WorkbookEvents_Event) _workbook).Sync += value;
}
remove
{
((WorkbookEvents_Event) _workbook).Sync -= value;
}
}
Activate事件与Sync事件类似。