Предложение улучшения компилятора C#

Но реальный вопрос в том, является ли модифицируемый Dtype при обновлении?

blockquote>

Нет, вы не можете: source .

Из вашего примера ваш чистый код Java будет выглядеть следующим образом:

Parent parent = new Parent(); //object received from request, stored in database as it is
if (some conditions is met) {
   // FirstChild firstChild = (Parent) parent; //this would throw ClassCastException
   FirstChild firstChild = new FirstChild(parent); //creating new object, gc will collect parent
}

Таким образом, hibernate действует так же, как и Java: вы не можете обновить Parent, вы должны создать новую запись для firstChild и удалить parent.

Не поможет ли вам использовать @DiscriminatorFormula вместо проверки some condition is met при обработке запроса?

@DiscriminatorFormula("case when value = 'some value' then 'FirstChild' else 'SecondChild' end")

Тогда вам не придется сохранять Parent, а затем обрабатывать его записи.

13
задан Rene 9 March 2009 в 22:30
поделиться

7 ответов

Каждый называет метод для его побочных эффектов для его возвращаемого значения, или для обоих? "Чистые" функции (то, которые не имеют никаких эффектов и только служат для вычислений возвращаемого значения), было бы хорошо для аннотирования как таковой, оба для устранения типа ошибки, которую Вы описываете, а также включить некоторую потенциальную оптимизацию/исследования. Возможно, через еще 5 лет мы будем видеть, что это происходит.

(Обратите внимание, что компилятор F# предупредит любое время, что Вы неявно игнорируете возвращаемое значение. 'Проигнорировать' функция может использоваться, когда Вы хотите явно проигнорировать ее.)

8
ответ дан 1 December 2019 в 23:32
поделиться

Если у Вас будет Resharper, то он выделит вещи как это для Вас. Наклон рекомендует resharper достаточно высоко, он имеет много полезных дополнений IDE особенно вокруг рефакторинга.

http://www.jetbrains.com/resharper/

6
ответ дан 1 December 2019 в 23:32
поделиться

У меня есть ретроспективные кадры к помещению (пусто) набирает весь printf () вызовы, потому что я не мог заставить Линт замолчать о проигнорированном возвращаемом значении.

Тем не менее кажется, что эта функциональность должна быть в некотором инструменте средства проверки кода, а не самом компиляторе.

1
ответ дан 1 December 2019 в 23:32
поделиться

Я не уверен, что мне нравится это. Я назвал много методов, которые возвращают значение, которое я принимаю решение не получить. Добавление некоторого типа значения по умолчанию (компилятор генерирует предупреждение, когда возвращаемое значение не обрабатывается) просто кажется неправильным мне.

Я действительно соглашаюсь, что что-то вдоль предложенных строк могло бы выручить новых программистов, но добавление атрибута в этой точке в игре будет только влиять на очень небольшое количество родственника методов большое существующее тело. Тот же самый младший программист никогда не будет получать их голову вокруг проблемы, когда большинство их необработанных возвращаемых значений не будет отмечено компилятором.

Возможно, был хороший путь назад когда, но лошади вне сарая.

2
ответ дан 1 December 2019 в 23:32
поделиться

Я на самом деле предпочел бы способ отметить структуру или класс как [Неизменные], и иметь это обработало автоматически (с предупреждением) для методов, названных, не используя их возвращаемые значения на неизменных объектах. Это могло также защитить объект компилятором от изменений после создания.

Если бы объект является действительно неизменным объектом, действительно не было бы никакого способа обработать его. Это также могло потенциально использоваться компиляторами для ловли других частых ошибок.

Метки самого метода кажутся менее полезными для меня, все же. Я соглашаюсь с большинством других комментариев относительно этого. Если объект изменяем, называние метода могло бы иметь другие побочные эффекты, таким образом, вышеупомянутый код мог быть совершенно действительным.

1
ответ дан 1 December 2019 в 23:32
поделиться

По крайней мере, предупреждение компилятора было бы полезно. Возможно, они добавляют что-то подобное для (дизайна контракта) C# 4.0.

0
ответ дан 1 December 2019 в 23:32
поделиться

Это не гарантирует для предупреждения или прагмы. Существует слишком много мест, где это предназначается для отбрасывания результата, и я вполне раздражался бы, получая предупреждение/ошибку из компилятора просто, потому что метод был украшен некоторым атрибутом уловки.

Этот вид 'предупреждения' должен быть аннотирован в Редакторе IDE, как маленький значок на поле "Предупреждение: Отбрасывание возвращаемого значения" или подобный.

0
ответ дан 1 December 2019 в 23:32
поделиться