Мне нравится возможность иметь индексатор без раздачи
прямая ссылка на «проиндексированный» элемент. Я написал простую
Класс обратного вызова "callback" ниже ...
R = возвращаемый тип из индексатора
P = переданный тип в индексатор
Все, что действительно делает индексатор, это передает операции
развертыватель и позволяет им управлять тем, что на самом деле происходит
и возвращается.
public class GeneralIndexer<R,P>
{
// Delegates
public delegate R gen_get(P parm);
public delegate void gen_set(P parm, R value);
public delegate P[] key_get();
// Events
public event gen_get GetEvent;
public event gen_set SetEvent;
public event key_get KeyRequest;
public R this[P parm]
{
get { return GetEvent.Invoke(parm); }
set { SetEvent.Invoke(parm, value); }
}
public P[] Keys
{
get
{
return KeyRequest.Invoke();
}
}
}
Чтобы использовать его в программе или классе:
private GeneralIndexer<TimeSpan, string> TimeIndex = new GeneralIndexer<TimeSpan,string>();
{
TimeIndex.GetEvent += new GeneralIndexer<TimeSpan, string>.gen_get(TimeIndex_GetEvent);
TimeIndex.SetEvent += new GeneralIndexer<TimeSpan, string>.gen_set(TimeIndex_SetEvent);
TimeIndex.KeyRequest += new GeneralIndexer<TimeSpan, string>.key_get(TimeIndex_KeyRequest);
}
работает как чемпион, особенно если вы хотите контролировать доступ к
ваш список или делать какие-либо специальные операции, когда что-то происходит.