Обратная совместимость
От: rameel https://github.com/rsdn/CodeJam
Дата: 16.10.18 13:16
Оценка:
Чтобы избежать лишних аллокации надо бы заменить в классе Fn<T> readonly поля на свойства, но сложность в обратной бинарной совместимости.

PS. Смысл в том, чтобы не инициализировать все поля за раз, так как ситуация, когда все свойства класса Operators<T> используются, исчезающе мала. Поэтому вместо того, чтобы инициализировать все и сразу, делаем лениво. Как то так:

Было:
private static readonly Lazy<Func<T, T>> _unaryMinus =
    new Lazy<Func<T, T>>(() => UnaryOperator<T>(ExpressionType.Negate), _lazyMode);

public static Func<T, T> UnaryMinus => _unaryMinus.Value;
...
И так все 25 свойств


Стало:
public static Func<T, T> UnaryMinus => UnaryMinusHelper.LazyValue.Value;

private static class UnaryMinusHelper
{
    public static readonly Lazy<Func<T, T>> LazyValue = new Lazy<Func<T, T>>(Factory, _lazyMode);
    private static Func<T, T> Factory() => UnaryOperator<T>(ExpressionType.Negate);
}


В этом случае, инициализированы будут только используемые свойства.

Так вот, такой трюк не проходит с классом Fn<T>, так как используются поля вместо свойств. Если совместимостью в этом случае можно пожертвовать, я поменяю поля на свойства, если нет — для класса Fn<T> верну как было.

Что думаете?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.