Книга: C# для профессионалов. Том II
Методы
Методы
Давайте сравним синтаксис, применяющийся в VB и C# для объявления части кода, которая будет обрабатывать событие.
В VB:
Private Sub cmdShowResults_Click()
а в C#:
private void OnClickShowResults(object sender, System.EventArgs e)
Первое замечание, которое необходимо сделать, состоит в том, что версия VB объявляет подпрограмму, в то время как версия C# объявляет метод. В Visual Basic код традиционно группируется в подпрограммы и функции с лежащей в основе этого концепцией процедуры. Помимо этого, объекты классов VB имеют так называемые методы, которые для всех практических целей означают то же самое, что и процедуры, за исключением того, что они являются частью модуля класса.
C#, наоборот, обладает только методами (в соединении с тем фактом, что, как будет показано позднее, все в C# является частью класса). В C# нет отдельной концепции функции и подпрограммы — эти термины даже не существуют в спецификации этого языка. В VB единственное реальное различие между подпрограммой и функцией состоит в том, что подпрограмма никогда не возвращает значение. В C#, если метод не должен возвращать значение, то это объявляется как возвращение void
(как выше проиллюстрировал метод OnClickShowResults()
).
Синтаксис объявления метода аналогичен в обоих языках, по крайней мере в том, что параметры следуют за именем метода в скобках. Отметим, однако, что в то время как в VB подпрограмма объявляется с помощью ключевого слова Sub
, в версии C# соответствующего слова не существует. В C# возвращаемого типа (void
в данном случае), за которым следует имя метода и открывающая скобка, будет достаточно для сообщения компилятору, что объявлен метод, так как ни одна другая конструкция в C# не имеет подобного синтаксиса (массивы в C# помечаются квадратными, а не круглыми скобками, поэтому нет риска смешения с ними).
Подобно Sub в VB, приведенному выше объявлению метода в C# предшествует ключевое слово private
. Оно имеет примерно то же значение, что и в VB — не позволяет внешнему коду видеть метод. Что точно понимается под "внешним кодом", будет рассмотрено позже.
Необходимо отметить еще два различия в объявлении метода: версия C# получает два параметра и имеет имя, отличное от обработчика событий в VB.
Сначала рассмотрим различие в имени. Имя обработчика событий в VB задается как VB IDE. VB знает, что Sub является обработчиком событий для нажатия кнопки, потому что используется имя cmdShowResults_Click
. Если переименовать подпрограмму, то она не будет вызываться при нажатии кнопки. Однако C# не использует имя таким образом. В C#, как скоро будет показано, существует некий код, который сообщает компилятору, какой именно метод является обработчиком событий. Это означает, что обработчику можно задать любое имя. Однако что-нибудь начинающееся с On
для обработчика событий является традиционным, в C# обычная практика именования методов (и в связи с этим большинства других элементов) с помощью так называемой системы имен в стиле Pascal
которая означает, что слова соединяются вместе, а первая буква слова делается заглавной. Использование подчеркиваний в именах C# не рекомендуется, и имя здесь выбрано в соответствии с этими рекомендациями: OnClickShowResults()
.
Теперь о параметрах. В этом приложении не будут подробно рассматриваться параметры, но отметим просто, что все обработчики событий в C# должны иметь два параметра, аналогичные данным, и эти параметры могут предоставить некоторую дополнительную полезную информацию о событии (например, для события перемещения мыши они могут сообщать о положении указателя мыши).