У меня есть класс, который будет хранить объекты, которые происходят из базового класса и реализуют интерфейс. В этом примере все типы производятся от UIElement
и реализуют мой интерфейс IDropTarget
.Создайте экземпляр списка, в котором тип получен из базового класса и интерфейса
Так что в моем классе у меня есть, я могу использовать общий вывод типа в фантастический способ требует этого, не ограничивая все для конкретного базового класса
public void AddDropTarget<TTarget>(TTarget target)
where TTarget : UIElement, IDropTarget
{
target.DoSomethingAsUIElement();
target.DoSomethingAsIDropTraget();
// Now I want to save it for another method
list.Add(target);
}
public void DoStuff()
{
foreach(var item in list)
{
item.MoreUIElementAndDropStuff();
}
}
К сожалению, кажется, нет никакого способа для меня, чтобы сохранить этот список ограничений TTarget. Я не могу ограничить его определенным типом, потому что у меня есть несколько классов, которые уже получены из UIElement (Rectangle, Button, Grid и т. Д.), И мне не удастся сделать все эти объекты производными от базового типа.
Следующее решение будет хранить список каждого типа. Мне нужно выяснить, стоит ли это накладные расходы, и бросать объекты каждый раз, когда я их использую.
Почему вы не делаете 'list = new List();'? –
Tony
В вашем случае вы можете добавить 'UIElement AsUIElement {get; } 'к вашему интерфейсу. Затем вы можете получить список «IDropTarget» и сделать что-то вроде 'foreach (элемент var в списке) {item.AsUIElement.Focus(); } ' –
Тони: Я не могу использовать Список, потому что мне также нужен доступ к IDropTarget. –