Свойства F # против C # свойств - PullRequest
5 голосов
/ 28 декабря 2011

При разработке приложения F # у меня есть тип, который содержит свойство типа Lazy<'T>.

По-видимому, один интересный побочный эффект (простите за каламбур) способа, которым F # обрабатывает синтаксический сахар свойств (в отличие от пути C #), заключается в том, что метод получения и установки свойства может возвращать / принимать различные типов. (По крайней мере, Visual Studio не жалуется, так как я пишу код, который использует это наблюдение.)

Например, мне выгодно сделать это:

let lazyValue = lazy 0

member this.Value
    with get () =
        lazyValue.Value
    and set _lazyVal =
        lazyValue <- _lazyVal

... такой, что Value возвращает int, но принимает только Lazy<int>.

Что меня интересует, так это теоретические, идиоматические и практические возражения против таких действий. Это что-то, из-за чего сноб F # мог бы поднять нос? Есть ли какое-то практическое правило программирования, которое эта (объектно-ориентированная реализация) явно нарушает? Это подход, который был продемонстрирован, чтобы вызвать проблемы в крупномасштабных приложениях? Если да, то почему / как?

1 Ответ

5 голосов
/ 28 декабря 2011

Возможно, это ошибка, что «Visual Studio не жалуется, когда [вы] пишете код, который использует это наблюдение».См. Использование опции F # Введите в C #

Комментарий в ответе на примечания к связанному вопросу:

Из раздела 8.13.1 спецификации: ЕслиУ элемента свойства есть как метод получения, так и метод установки, и ни один из них не является индексатором, тогда сигнатуры как метода получения, так и метода установки должны подразумевать один и тот же тип свойства

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...