У меня есть класс, в котором будут храниться объекты, производные от базового класса и реализующие интерфейс. В этом примере все типы происходят от 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<UIElement>();
? - person Tony   schedule 13.12.2013UIElement AsUIElement { get; }
в свой интерфейс. Затем вы можете получить списокIDropTarget
и сделать что-то вродеforeach(var item in list) { item.AsUIElement.Focus(); }
- person default.kramer   schedule 15.12.2013