Я конвертирую некоторый код VB6 в C #, и он должен быть видимым для COM.У меня есть класс коллекции, который реализует IEnumerator и IEnumerable, и это успешно работает из COM-клиента, если я создаю экземпляр этого класса.
Set test = CreateObject("Application.Children")
test.Load(parentID)
Print test.Count
Теперь этот класс также предоставляется как свойство другого класса
interface IParent
{
string Name {get;}
Children AllKids {get;}
}
class Parent : IParent
{
private Children _children;
private string _parentName;
public Children AllKids {get => _children}
public string Name {get => _parentName};
}
Однако, когда я пытаюсь проверить это из COM-клиента
set test = CreateObject("Application.Parent")
test.Load(parentID)
Print test.AllKids.Count
Я получаю ошибку
"Объект не поддерживает это свойствоили метод: 'test.AllKids.Count' "
Интерфейс Children правильно представлен для COM с собственным интерфейсом (IChildren
), как и класс Parent
.
Короче говоря, если COM создает экземпляр класса Children, у меня есть доступ к свойствам и функциям этого класса, но если я пытаюсь получить доступ к этому классу из экземпляра Parent
, я не могу.
У кого-нибудь есть идеи?
РЕДАКТИРОВАТЬ: - Я добавил класс Children ниже, хотя еще не все методы, требуемые интерфейсом, написаны.
public class Children: IMyCollection<IChild>
{
private List<IChild> _baseCollection = new List<IChild>();
protected int _position = 0;
public int Count => _baseCollection.Count;
public IChild Current => _baseCollection[_position];
public void Add(IChild newItem)
{
_baseCollection.Add(newItem);
}
public void Clear()
{
_baseCollection.Clear();
}
public bool Contains(IChild item)
{
throw new NotImplementedException();
}
public void CopyTo(IChild[] array, int arrayIndex)
{
throw new NotImplementedException();
}
public IEnumerator GetEnumerator()
{
return new Enumerator<IChild>(_baseCollection);
}
public bool MoveNext()
{
_position++;
return (_position < _baseCollection.Count);
}
public bool Remove(IChild item)
{
throw new NotImplementedException();
}
public void Reset()
{
_position = 0;
}