SI>Здорово, что ответили. Упредили наши вопросы
SI>Возвращаясь к содержанию тогоАвтор: BorisKV
Дата: 28.05.10
топика. Почему AndrewVK и MozgC так противятся тому, что ref-параметр и возврат очень плохо? Мы же не на флэшке данные переносим между методами? Или чего-то мы конкретно не понимаем в этой теме?
Ну это лучше всего спросить у самого AndrewVK и MozgC почему конкретно они противятся ref.
Я понимаю почему Игорь так сделал в те далекие времена. Насчет возврата nullable типов — их тогда не было, к тому же это таже структура. Насчет структур...
Да, можно сделать было нечто вида
struct IsDirtyReturnValue
{
bool processed;
bool isDirty;
}
Теперь соответственно предположим, как будет выглядеть сгенерированный IsDirtyMember, из того поста, для объекта с двумя полями int и string:
[BLToolkitGenerated]
IsDirtyReturnValue IMemberwiseEditable.IsDirtyMember(PropertyInfo propertyInfo, string memberName)
{
IsDirtyReturnValue returnValue = this._number.IsDirtyMember(_number_$propertyInfo, memberName);
if (!returnValue.processed)
{
returnValue = this._str.IsDirtyMember(_str_$propertyInfo, memberName);
if (!returnValue.processed)
{
}
}
return returnValue;
}
соответственно меняем EditableValue<T>
public IsDirtyReturnValue IsDirtyMember(PropertyInfo propertyInfo, string memberName)
{
if (memberName != propertyInfo.Name)
return new IsDirtyReturnValue {processed=false};
return new IsDirtyReturnValue {processed=true,isDirty=IsDirty};
}
и меняем EditableObject
public virtual bool IsDirtyMember(string memberName)
{
bool isDirty = false;
if (this is IMemberwiseEditable)
{
IsDirtyReturnValue returnValue = ((IMemberwiseEditable)this).IsDirtyMember(null, memberName);
if (returnValue.processed)
isDirty = returnValue.processed;
}
return isDirty;
}
Я думаю общий принцип понятен. А теперь предпологаем что в объекте 150-200 полей и встает вопрос — сколько операций создания (я понимаю что это на стеке...), копирования и т.д. мы получим. Может я конечно преувеличиваю (бенчмарков я не делал), и все не так страшно, но мне почему-то кажется, что решение Игоря хотя и менее "кошерное" с точки зрения преверженцев красоты архитектуры и чистоты решений, но все же более быстрое и разумное, хотя наверняка будут возражения.
А вообще такую тему лучше обсуждать где-нибудь в философии или священных войнах...
... << RSDN@Home 1.2.0 alpha 4 rev. 1238>>