我有一个VB6类需要实现我在C#中创建的接口。我已经成功地通过COM实现了接口的所有属性,但是无法实现它具有的事件。如果我理解正确,我将需要定义相当于添加和删除访问器以注册事件的消费者,但我无法让VB6接受具有定义事件的接口。我将类的InterfaceType设置为InterfaceIsIDispatch,但仍然在尝试编译时收到“Bad interface for Implements: method has underscore in name”错误。接口没有定义任何方法,属性和事件也没有下划线。
以下是接口定义:
namespace AV8B.Overlay
{
[ComVisible(true)]
[Guid("89519DCE-86D6-4962-8CEA-450F2AB31B4E")]
public delegate void OverlaySymbolPropertyChangedEventHandler(object sender, OverlaySymbolPropertyChangedEventArgs e);
[ComVisible(true)]
[Guid("9A59EF10-B688-4af9-8C21-FB95C7ED699A")]
public class OverlaySymbolPropertyChangedEventArgs : PropertyChangedEventArgs
{
OverlaySymbolPropertyChangedEventArgs(string propertyName) : base(propertyName) { }
}
[ComVisible(true)]
[Guid("379B179C-85FA-4efb-8198-D1A4C80D645A")]
public interface IOverlaySymbol : INotifyPropertyChanged
{
bool SelectedForProcessing { get; set; }
int SymbolNumber { get; }
string SymbolType { get; }
double Latitude { get; }
double Longitude { get; }
string Color { get; }
int Size { get; }
/// <summary>
/// This method fires the PropertyChanged event.
/// </summary>
void NotifyPropertyChanged();
/// <summary>
/// The event that fires when a property changes.
/// </summary>
new event OverlaySymbolPropertyChangedEventHandler PropertyChanged;
}
}
这样做的目的是将已经实现该接口的VB对象放置到一个绑定列表中,该列表将附加到一个列表网格视图上。列表网格视图需要知道其项的属性何时发生更改,以便及时更新。