我目前正在尝试使 C# API 在 COM 中可见,并且我目前坚持使非泛型GetEnumerator
方法在 COM 中对于也继承的类可见IEnumerable<T>
。如果我在 上实现另一种方法ITestIEnumerable
,它是可见的。我还发现GetEnumerator
从列表派生的类上可以看到非泛型方法。
我真的不明白为什么这不起作用,这似乎是继承的类的特例IEnumerable<T>
。有没有办法将它暴露给 COM,以便我可以在 VB6 中使用 For Each 构造?
例如
[ClassInterface(ClassInterfaceType.AutoDual)]
[ProgId("Test")]
[Guid("1aa2bdec-0530-44e8-b62d-b75914a6de22")]
public class TestIEnumerable : ITestIEnumerable
{
#region IEnumerable<Item> Members
[ComVisible(false)]
public IEnumerator<Item> GetEnumerator()
{
return _collection.GetEnumerator();
}
#endregion
#region ITestIEnumerable Members
[DispId(-4)]
[ComVisible(true)]
IEnumerator ITestIEnumerable.GetEnumerator()
{
return _collection.GetEnumerator();
}
#endregion
#region IEnumerable Members
[DispId(-4)]
[ComVisible(true)]
IEnumerator IEnumerable.GetEnumerator()
{
return _collection.GetEnumerator();
}
#endregion
}
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("187f3fed-9d4a-4a52-9a7c-a2fdeb56b9fa")]
[ComImport]
public interface ITestIEnumerable : IEnumerable<Item>
{
[DispId(-4)]
[ComVisible(true)]
new IEnumerator GetEnumerator();
}