Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, bessony, Вы писали:
B>>И кстати as в цепочке if-ов работал бы быстрее чем is.
H>Однако мне не верится в это По моему опыту забегов ncc.exe скорость их равна — JIT компилятор достаточно умен чтобы оптимизировать тестирование типа и последующее приведение к нему.
Рихтер в это верит!
Здравствуйте, bessony, Вы писали:
B>Рихтер в это верит!
Ссылку на Рихтера. На практике разница и в микроскоп не видна.
ПС Просьба не оверквотить.
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, bessony, Вы писали:
B>>Рихтер в это верит!
H>Ссылку на Рихтера. На практике разница и в микроскоп не видна.
H>ПС Просьба не оверквотить.
CLR via C# .NET 2.0 стр.96
Цитата:
if (о is Employee)
{
Employee e = (Employee) о;
// Используем е внутри оператора if.
}
В этом коде CLR по сути проверяет тип объекта дважды: сначала в операторе is определяется совместимость о с типом Employee, а затем в теле оператора if происходит анализ, является ли о ссылкой на Employee. Контроль типов в CLR укрепляет безопасность, но при этом приходится жертвовать производительностью, так как CLR должна выяснять фактический тип объекта, на который ссылается переменная (о), а затем проверить всю иерархию наследования на предмет наличия среди базовых типов заданного типа (Employee). Поскольку такая схема встречается в программировании часто, в С# предложен механизм, повышающий эффективность кода с помощью оператора as.
Employee e = о as Employee;
if (e != null)
{
// Используем е внутри оператора if.
}
В этом коде CLR проверяет совместимость о с типом Employee, если это так, as возвращает ненулевой указатель на этот объект. Если о и Employee несовместимы, оператор as возвращает null. Заметьте: оператор as заставляет CLR верифицировать тип объекта только раз, a if лишь сравнивает е с null — такая проверка намного эффективнее, чем определение типа объекта.
Здравствуйте, Злобастик, Вы писали:
З>Эти объекты должны содержать исключительно данные. (по сути эти объекты — часть модели данных). Алгоритмы должны быть известны контроллеру (под известны я подразумеваю, что либо реализованы в нем, либо делегированы).
http://en.wikipedia.org/wiki/Visitor_pattern не подойдет?
... << RSDN@Home 1.2.0 alpha 5 rev. 16 on Windows 7 6.1.7601.65536>>