Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
45666666666666666666666666666666666666666666666....rtf
Скачиваний:
1
Добавлен:
10.07.2019
Размер:
224.9 Кб
Скачать

Void JustWriteSomething( string someThing )

{

Console.WriteLine( someThing );

}

И наконец, возможно вы догадались, что слово «return» фактически возвращает значение. Когда компьютер встречает слово «return» происходит выход из метода и возврат запрашиваемого значения.

Возвращаемые значения затем автоматически становятся доступными в любом месте, где мы вызываем метод.

Например, возвращенное значение мы могли бы использовать следующим способом:

Сначала мы могли бы сохранить ответ в переменной и затем использовать значение переменной в отдельном выражении.

Или мы могли бы вызвать метод непосредственно в выражении WriteLine следующим образом:

Строительный блок: Возвращаемые значения

Иногда возникает необходимость получить значение из метода. В таком случае вместо указания типа «void», что означает, что «никакого значения возвращено не будет», мы указываем определенный тип данных, возвращаемых методом. class Person

{

// Поля

string firstName;

string lastName;

// Метод

int LuckyNumber( int numberOfTeeth, int age )

{

return ( numberOfTeeth * age );

}

}

Person Susy;

Susy = new Person();

int num = Susy.LuckyNumber(24, 14);

Console.WriteLine("Счастливое число Susy " + num);

Console.WriteLine(“Счастливое число Susy “ + Susy.LuckyNumber(24, 14) );

Как и поля (см. предыдущую главу), методы можно вызвать из других классов. Такую возможность можно разрешить или запретить.

По умолчанию, все методы будут рассматриваться как private (закрытые), что означает, что их можно использовать только внутри своего класса. Чтобы разрешить их использование из других классов, можно добавить слово «public» в начало объявления.

public void JustWriteSomething( string someThing )

{

Console.WriteLine( someThing );

}

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

В одном из разделов этой книги мы уже рассматривали пример с закрытыми и открытыми полями. Давайте дополним наш пример и включим закрытые (Private) и открытые (Public) методы в класс «Animal» и затем пытаемся обратиться к ним из класса «Zoo».

class Animal

{

public string kindOfAnimal;

public string name;

public int numberOfLegs;

public int height;

public int length;

public string color;

bool hasTail;

protected bool isMammal;

private bool spellingCorrect;

public string GetFoodInfo()

// Открытый метод, получающий информацию о том, чем питается животное

{

// Представим, что здесь расположен код, выполняющий поиск по базе данных

}

private void SpellingCorrect()

// Закрытый метод для проверки правильности написания вида животного

{

// Представим, что здесь расположен код для проверки правописания

}

protected bool IsValidAnimalType()

// Защищенный метод, принимающий решение о существовании указанного вида животного

{

// Представим, что здесь расположен код для проверки существующих видов животных

}

}

class Zoo

{

Animal a = new Animal ();

a.name = “Kangaroo”;

string food;

bool animalExists;

// Следующий код будет выполнен успешно, поскольку классу «Zoo» разрешено

// обращаться к открытым методам в классе «Animal»

food = a.GetFoodInfo(); // Вызов открытого метода

// Обе следующие строки НЕ будут выполнены, поскольку классу «Zoo»

// не разрешено обращаться к закрытым или защищенным методам

a.spellingCorrect(); // Попытка вызова закрытого метода

animalExists = a.IsValidAnimalType(); // Попытка вызова защищенного метода

}

Очень часто вам будут встречаться классы с достаточно специфичным типом метода, называемым «конструктором». Имя метода-конструктора соответствует имени класса и тип возврата в него не включается.

Данный метод называется конструктором, поскольку он помогает «конструировать» или строить объект при первом его создании. Создание этого метода в классах считается хорошей практикой.

class Person

{

// Поля

string firstName;

string lastName;

// Метод-конструктор для класса Person

public Person()

{

firstName = "Johnny";

lastName = "Rocket";

}

}

Метод-конструктор обрабатывается по-особому: он выполняется автоматически при каждом создании экземпляра класса.

Напоминание:

Под «экземпляром класса» мы понимаем определенный объект класса. Например, в одном из предыдущих разделов по объектам мы выделили «Гориллу Джереми» как определенный объект или экземпляр класса «Animal».

Итак, если мы выполним следующий код...

Person p = new Person();

Console.WriteLine( p.lastName );

то результатом будет слово «Rocket» на экране. Создав объект «Person» мы автоматически и незаметно выполнили метод конструктора «Person», который в этом случае задает значение «Rocket» для lastName.

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

Это действие можно сравнить с методом-конструктором, выполняемым для класса. Прежде чем новый экземпляр класса сможет что-либо сделать, выполняется метод-конструктор. В него можно включить любые действия, которые должны выполняться автоматически, прежде чем объект будет считаться «готовым к жизни».

Конструкторы с параметрами

В метод-конструктор можно включить параметры. Приведем пример класса с двумя различными методами-конструкторами:

class Person

{

// Поля

string firstName;

string lastName;

// Первый метод-конструктор

public Person()

{

firstName = "Johnny";

lastName = "Rocket";

}

// Второй метод-конструктор

public Person( string f, string l )

{

this.firstName = f;

this.lastName = l;

}

}

И теперь у нас есть два разных способа конструирования объекта:

Например, этот:

Person p = new Person();

И в поле p.lastName будет автоматически подставлено значение «Rocket».

Или же этот:

Person p = new Person( "Jiminy", "Cricket" );

И в поле p.lastName будет подставлено значение «Cricket».

Помните, что слово «this» относится к «тому объекту, который мы создаем". То есть, фактически говорится «подставлять в поля имени и фамилии этого нового объекта любые значения, передаваемые методу-конструктору».

В реальном мире события происходят непрерывно. Некоторые события не зависят от нас. Например, восход и закат солнца (хотел бы я посмотреть, как вы пытаетесь заставить солнце вставать и садится). Другие события могут вызываться нами, скажем, мы можем заставить громкоговоритель издавать звуки.

В компьютерном мире в основном встречаются следующие события:

Нажатие кнопки на экране монитора

Истечение времени таймера

Перемещение мыши

Нажатие клавиши на клавиатуре

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

Давайте рассмотрим пример с нажатием кнопки, поскольку это, возможно, наиболее распространенное событие, и детально разберем порядок работы. Допустим, в вашей программе есть объект кнопки с именем mrButton и словами «Click me» на ней.

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

Чтобы запустить Visual C# Express в меню «Пуск» укажите «Все программы» и затем «Microsoft Visual C# 2005 Express Edition».

Создайте новый проект приложения Windows: В меню File(«Файл») выберите Create project(«Создать проект») и затем выберите тип проекта Windows Application («Приложение Windows»).

В Visual C# Express откроется несколько файлов с «кодом-скелетом» программы.

В окне обозревателя решений справа (где перечислены все файлы) удалите файл с именем Form1.cs.

Дважды щелкните имя файла Program.cs и удалите весь автоматически вставленный «скелет» кода.

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

using System;

using System.Windows.Forms;

class MyButtonClass: Form

{

private Button mrButton;

// Метод-конструктор

public MyButtonClass()

{

mrButton = new Button();

mrButton.Text = "Click me";

this.Controls.Add(mrButton);

}

// Основной метод

static void Main()

{

Application.Run( new MyButtonClass() );

}

}

Выполните программу при помощи клавиши F5 на клавиатуре (или щелкните зеленую кнопку «Выполнить»). Если возникнут сообщения об ошибках, тщательно проверьте код на предмет опечаток. Если программа будет выполнена успешно, то вы должны увидеть форму с кнопкой «Click me». Пока при нажатии на кнопку никаких действий происходить не будет. Совсем не то, что вы ждали, я знаю, но мы придем и к этому.

Событие нажатия кнопки

Указание действия в случае события

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

using System;

using System.Windows.Forms;

class MyButtonClass: Form

{

private Button mrButton;

// Метод-конструктор

public MyButtonClass()

{

mrButton = new Button();

mrButton.Text = "Click me";

this.Controls.Add(mrButton);

}

// Основной метод

static void Main()

{

Application.Run( new MyButtonClass() );

}

// Метод обработчика событий