Форма C#. Близко по сравнению с формой. Расположить

val input = generateSequence(::readLine).joinToString("\n")
print(input)

Первая строка получает многострочный ввод из stdin и помещает его в переменную.

generateSequence - это функция из стандартной библиотеки kotlin, пакета kotlin.sequences, которая принимает другую функцию и вызывает ее до тех пор, пока она не вернет ноль. В конце он вернет экземпляр Sequence, то есть последовательность элементов, которые могут быть перебраны.

Часть ::readLine - это способ передачи функции readLine, используемой для чтения из stdin, в функцию generateSequence. Простой вызов readLine() без :: вызовет ошибку компилятора, поскольку generateSequence ожидает лямбда, а не строку.

Метод joinToString принадлежит классу Sequence. Он будет перебирать свои элементы и соединять их, используя заданный разделитель, который в данном случае представляет собой новую строку (\ n).

Finnaly во второй строке, мы просто выводим результат на стандартный вывод.

79
задан demonplus 24 December 2015 в 08:27
поделиться

4 ответа

Этот форум на MSDN сообщает вам.

Form.Close () отправляет правильную Windows сообщения для выключения win32 окно. Во время этого процесса, если форма не отображалась модально, Dispose позвонил в форму. Удаление формы освобождает неуправляемые ресурсы, которые форма держится.

Если вы выполните form1.Show () или Application.Run (новая форма Form1 ()) , удаление будет вызываться при вызове Close () .

Однако, если вы выполните form1.ShowDialog () чтобы показать форму модально, форма не будет утилизирован, и вам понадобится для вызова form1.Dispose () самостоятельно. я верю, это единственный раз, когда ты следует беспокоиться об утилизации формы сам.

156
ответ дан 24 November 2019 в 10:10
поделиться

То, что у меня есть просто эксперимент с инструментами диагностики VS, я назвал это. Близко () тогда formclosing событие инициирован. Тогда, Когда я называю это. Расположите () в конце в событии Formclosing, где я располагаю много других объектов в нем, это чистит все намного намного более гладкое.

-1
ответ дан 24 November 2019 в 10:10
поделиться

Как правило, я всегда рекомендую явно вызывать метод Dispose для любого класса, который его предлагает, либо вызывая метод напрямую, либо заключая его в блок using.

Чаще всего классы, реализующие IDisposible, делают это, потому что они обертывают некоторый неуправляемый ресурс, который необходимо освободить. В то время как эти классы должны иметь финализаторы, которые действуют как защита, вызов Dispose поможет освободить эту память раньше и с меньшими накладными расходами.

В случае объекта Form, как отметила Кира, метод Close документирован для вызова Dispose от вашего имени, поэтому вам не нужно делать это явно. Однако мне всегда казалось, что полагаться на детали реализации. Я предпочитаю всегда вызывать как Close, так и Dispose для классов, которые их реализуют, для защиты от изменений / ошибок реализации и для ясности. Правильно реализованный метод Dispose должен быть безопасным для многократного вызова.

14
ответ дан 24 November 2019 в 10:10
поделиться

Отсутствие вызова Close , вероятно, обходит отправку группы сообщений Win32, которые, как можно было бы подумать, несколько важны, хотя я не могу конкретно сказать вам, почему ...

Close имеет преимущество вызывая события (которые могут быть отменены), чтобы посторонний (к форме) мог наблюдать за FormClosing и FormClosed , чтобы отреагировать соответствующим образом.

Мне неясно, вызываются ли FormClosing и / или FormClosed , если вы просто удаляете форму, но я оставлю это вам, чтобы поэкспериментировать.

6
ответ дан 24 November 2019 в 10:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: