Вся эта затея с событиями началась со Smalltalk-а, там не было методов, только события и sender был нужен для обратного ответа. При работе с UI его можно использовать для изменения состояния sender и вам будет не важно сколько у вас элементов, достаточно всего одного обработчика для всех
Таков паттерн, договоренность между программистами, чтобы разграничить ответственность и дать понять другим программистам что этот класс предназначен для передачи данных в событиях и не нужно его пытаться использовать где-то еще. Если вы не будете использовать EventHandler, то ничего ужасного не случиться, но те кто знают про этот паттерн могут сконфузиться и начать искать причину почему здесь не EventHandler. Такая же история из интерфейсами, вас никто не заставляет писать IService, можно просто Service.
Ну так сразу бы сказали что вам нужен OpenGL ES... Во 2 версии судя по доке такой возможности нет, а вот в 3 эсть GetProgramBinary. Можно получить сами байты и посчитать общий размер шейдера. Есть такое место, тут можно просмотреть все доки в виде таблиц.
limon_spb: я с таким не сталкивался, не знаю. Почему вам так важна именно 3 варсия, по моему сейчас все видеокарты(даже встроеные) поддерживают 4 версию?
У меня тоже мелькнула мысль что он будет работать начиная с 4.1 версии, поскольку метод glGetProgramBinary, который связаный с данной опцией, доступен только там. Было бы както глубо давать возможноть узнать размер шейдера в байтах, но не иметь возможности получить сами эти байты.
Артём Черница: та таки да, если бы почитали то знали что в .net эсть сборки. В них эсть полезные классы. Но если вдруг сборки нестало(а с нею и классов), ничего страшного, ее нужно найти. Это можно сделать при помощи nuget или установить нужную версию .net/либы вручную.