Шаблон декоратора в списке <T>для DataGridView - PullRequest
1 голос
/ 25 февраля 2011

Я хотел бы применить декоратор к классу List и иметь возможность привязать его к WinForms DataGridView.

Я хотел бы знать, какие члены List мне нужно реализовать, чтобы этот новый класс мог иметь возможностьпривязать его к DataGridView?

Некоторые методы из списка, которые я скрывал бы с помощью методов с декорированным классом, а другие - просто вызывать _decoratedList.Method ().

.реализовать Decorator для типа List?

Decorator (теперь изменен на использование IList):

public class MyCustomList : IList<MyObject>
{
  IList<MyObject> _decoratedList = new List<MyObject>; 

  // implementing all the required method with _decoratedList.BaseMathodName()
.
.
.
}

Идея состоит в том, чтобы иметь класс, который я могу просто привязать в качестве источника данных к DataGridView, использоватьПеречислите методы, которые мне нужны, и не пишите их все самостоятельно, а добавьте несколько новых методов в этот новый класс.

1 Ответ

3 голосов
/ 25 февраля 2011

как минимум, просто нужно IList.Поскольку вы наследуете List<T>, вы получаете это бесплатно, но учтите, что наследование! = Decorator, и обратите внимание, что List<T> не имеет виртуальных методов (хотя Collection<T> имеет) - так что вы не можете настроить ... что-нибудь много, наследуя List<T>.

К счастью, вы можете сделать простой псевдо-декоратор, реализовав IListSource (но реализация IList вручную будетпредпочтительнее), так как IListSource используется first .Для метаданных типа вам нужен либо типизированный (необъектный) индексатор, либо ITypedList (сложнее) - так:

public SomeType this[int index] { get {...} }

прочее необязательно интересные интерфейсы включают IBindingList,IBindingListView и ряд других для боковых функций;IRaiseItemChangedEvents и ICancelAddNew например.

...