+116
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
public delegate IEnumerable<int> ProcessStrategy();
public class ProcessEventArgs: EventArgs
{
public ProcessStrategy { get; set; }
}
public IEnumerable<int> GetSelectedDocuments()
{
var args = new ProcessEventArgs();
if (args.Strategy == null)
{
args.Strategy = delegate()
{
var result = new HashSet<int>();
WalkThrough(
delegate(ConceptInfo concept, CancelEventArgs cargs)
{
foreach (var doc in concept.Documents)
result.Add(doc);
}, State.Selected);
return result;
};
}
return args.Strategy();
}
Обьявляем делегат, потом обьявляем класс от EventArgs в котором (в EventArgs!) будет передаваться этот самый делегат.
Потом в нужном методе создаем экземпляр класса ProcessEventArgs, проверяем делегат на null - откуда он берется не null в только что созданном непонятно, но помним про прикол с Manager singleton того же автора :), присваеваем его делегату собственно код который и совершает необходимые операции, а потом....
Потом просто вызываем свежесозданый делегат.
Запостил: eval_2009,
06 Января 2011
Dummy00001 06.01.2011 03:57 # 0
так это же визитер паттерн!... или я не угадал? ;)
ну по крайней вот человек нашел еще один способ как удвоить/утроить количество классов и кода в проекте. долго думал при этом наверное. а ты жалуешься. :)
Dummy00001 06.01.2011 04:04 # +6
а вот вы сами попробуйте тот же helloworld на килобайт 50 кода раздуть. сразу поймете как это не просто из пальца вот такие художества высасывать.
амен.
ch 07.01.2011 09:55 # 0
guest 31.01.2017 01:55 # 0
barop 31.01.2017 04:08 # 0
Куплю, если фергана
inkanus-gray 23.10.2017 23:14 # +1
guest 03.03.2017 09:45 # 0
guest 03.03.2017 09:46 # 0
Vindicar 07.01.2011 11:31 # +1