Г. Шилдт - С#4.0 Полное руководство (1160795), страница 31
Текст из файла (страница 31)
рпшгс гпг Ьеяяпсовгясгог(1пя а, гпп Ь) ( гпс вах; 11(1ярггве(а) () 1ярг1ве(Ь)) геспгп 1; вах = а < Ь 2 а : Ь; Гог(ьпс 1=2) 1 <= вах/21 1Г ( ((я%1) == О) ЬЬ ( (ЬГ 1) == О) ) ге( ягп ьг геспгп 1г с1аяя Рягвоево ( ягясьс чо1б Мя1п() ( СЬКНпв оЬ = пен СЬКНпв() ьпс а, Ь! гог(ьпс 1=2; 1 < 101 1++) 11(оЬ.1ярг1ве(1)) Сопяо1е.нг1сеЬ1пе(1 + " простое число."); е1яе Сопяо1е.нггсеЬ1пе(1 + " непростое число."); 164 Часть!.
Язык С№ а=7; Ь = 8; Сопяо1е.ХгзвеЬгпе("Наименьший общий множитель чисел а + " и " + Ь + " равен оЬ.ЬеаяССощрасвог(а, Ы ) 1 а = 100; 8; Сопяо1е.игзсеЬьпе("Наименьший общий множитель чисел а + " и " + Ь + " равен оЬ.Ьеаяпсошраског(а, Ы ) 1 а = 1001 Ь = 75; Сопяо1е.игьгеььпе("Наименьший общий множитель чисел а + " и " ь Ь + " равен оЬ.Ьеазьсощгаспог(а, Ы ); Обратите внимание на следующее: когда вызывается метод ЬеаяССошрастог (), его аргументы также разделяются занятыми.
Ниже приведен результат выполнения данной программы. 2 простое число. 3 простое число. 4 непростое число. 5 простое число. Б непростое число. 7 простое число. В непростое число. 9 непростое число. Наименьший общий множитель чисел 7 и 8 равен 1 Наименьший общий множитель чисел 100 и 8 равен 2 Наименьший общий множитель чисел 100 и 75 равен 5 Если в методе используется несколько параметров, то для каждого из них указывается свой тип, отличающийся от других.
Например, приведенный ниже код является вполне допустимым. тпг МуМеСЬ(ьпо а, СопЬ1е Ь, 81оап с) Добавление параметризированного метода в класс Ви11Жтзд С помощью параметризированного метода можно дополнить класс Нп11с(1пс новым средством, позволяющим вычислять максимальное количество жильцов в здании, исходя из определенной величины минимальной площади на одного человека.
Этим новым средством является приведенный ниже метод Махосспрапс () . Возвратить максимальное количество человек, занимающих здание, !/ исхолн из заданной минимальной плошади на одного человека. роЬ11с тпь Махбссорапв(ьпг щ1пкгеа) геоигп Нгеа / щьпвгеа1 ) Глава 6. Введение в классы,объекты и методы 165 Когда вызывается метод МахОссцрапг (), его параметр т1пйгеа принимает величину необходимой минимальной площади на одного человека. На Вту величину делится общая площадь здания при выполнении данного метода, после чего он возвращает результат. Ниже приведен весь класс Вц11с(1пс, включая и метод Махбссцрапг () . /* Добавить параметризированный метод, вычисляющий максимальное количество человек, которые могут занимать здание, исходя из заданной минимальной площади на одного человека. */ оя1пс Буясею; с1аяя Ви11бтпч ( рпЫгс ьпс Р1оогя; // количество этажей рцЬ1гс гпг Агеа; // общая площадь здания рцЫьс 1пг Оссцрапсв( // количество жильцов Возвратить площадь на одного человека.
рцЬ11с ьпс ЛгеаРегРегяоп() ( гегцгп лгеа / Оссцрапгя; ) О Возвратить максимальное количество человек, занимающих здание, // исходя из заданной минимальной площади на одного человека. рцЫьс тпс Махоссцрапс(1пс щьпягеа) ( гесцгп Лгеа / щьплгеа; ) ) О Использовать метод Махоссцрапс(). с1аяя ВЫ1аьпчоещо ( ясасьс чотб Маьп() ( ВЫ1бьпд Ьоияе = пен Вц11б1пд М; ВЫ1б1по оГГ1се = пен ВЫ1бьпд(); // Присвоить значения полям в объекте Ьоцяе. Ьоцяе.оссцрапгя = 4; Ьоцяе.йгеа = 2500; Ьоцяе.Р1оогя = 2; Присвоить значения полям в объекте отттсе. отаъсе.оссирапгя = 25; оГГьсе.лгеа = 4200; оГЬьсе.Р1оогя = 3; Сопво1е.нгьсеъьпе("Максимальное количество человек в доме, 1п" "если на каждого должно приходиться 300 '; " кв. Футов: Ьоцяе.нахоссцрапс(300))( Сопяо1е.нг1сеъьпе("Максимальное количество человек 166 Часть ). Язык С() "в учреждении, 1п" "если на каждого должно приходиться 300 т " кв.
футов: огтьсе.Махссспрапя(300))4 Выполнение этой программы дает следующий результат. Максимальное количество человек в доме, если на каждого должно приходиться 300 кв. футов: 8 Максимальное количество человек в учреждении, если на каждого должно приходиться 300 кв. футов: 14 Исключение недоступного кода При создании методов следует исключить ситуацию, при которой часть кода не может быль выполнена ни при каких обстоятельствах.
Такой код называется недоопупным и считается в С() неправильным. Если создать метод содержащий недоступный код компилятор выдаст предупреждающее сообщение соответствующего содержания. Рассмотрим следующий пример кода. рпЬ1гс чоьо Муиеяь() ( сЬаг а, Ьг 11(а==Ь) ( Сопяо1е.игьсевьпе("равно"); геспгп; ) е1яе ( Сопяо1е.нгьгевьпе("не равно"); ГЕСПГП4 ) Сопяо1е.иггпеЬ1пе("зто недоступный код") ) В данном примере возврат из метода МуМеЬЬ () всегда происходит до выполнения последнего оператора, содержащего вызов метода игььеььпе () . Если попытаться скомпилировать этот код, то будет выдано предупреждающее сообщение. Вообщетоворд, недоступный код считается ошибкой программирования, и поэтому предупреждения о таком коде следует воспринимать всерьез.
Конструкторы В приведенных выше примерах программ переменные экземпляра каждого обьекта типа Вп114(1по приходилось инициализировать вручную, используя, в частности, следующую последовательность операторов. Ьопяе.осспрапяя = 4; Ьопяе.лгеа = 25004 Ьопяе.Р1оогя = 2; Глава 6. Введение в классы,объе(пы и методы 167 Такой прием обычно не применяется в профессионально написанном коде С№.
Кроме того, он чреват ошибками (вьг можете просто забыть инициализировать одно из полей). Впрочем, существует лучший способ решить подобную задачу: воспользоваться конструктором. Конструктор инициализирует объект при его создании. У конструктора такое же имя, как и у его класса, а с точки зрения синтаксиса он подобен методу. Но у конструкторов нет возвращаемого типа, указываемого явно. Ниже приведена общая форма конструктора. доступ имя класса(список параметров) ( тело конструктора Как правило, конструктор используется для задания первоначальных значений переменных экземпляра, определенных в классе, или же для выполнения любых других установочных процедур, которые требуются для создания полностью сформированного объекта.
Кроме того, доступ обычно представляет собой модификатор доступа типа рпЬ11с, поскольку конструкторы зачастую вызываются в классе. А список па— раме тров может быть как пустым, так и состоящим из одного или более указываемых параметров. У всех классов имеются конструкторы, независимо от того, определите вы их или нет, поскольку в С№ автоматически предоставляется конструктор, используемый по умолчанию и инициализирующий все переменные экземпляра их значениями по умолчанию. Для большинства типов данных значением по умолчанию является нулевое, для типа Ьоо1 — значение га1ве, а для ссылочных типов — пустое значение.
Но как только вы определите свой собственный конструктор, то конструктор по умолчанию больше не используется. Ниже приведен простой пример применения конструктора. // Простой конструктор. пягпо Яузгегм с1авв МуС1авя ( рпЬ11с 1пг х; рпЬ1гс МуС1аяв () ( х=10г ) ) с1авв СопяОеио ( япа11с то1П Ма1п() ( МуС1авв 11 = пен МуС1авя() г МуС1аяя 12 = пан МуС1авз () ! Сопвп1е.нгггеьгпе(11,х + " " т 12.х) г В данном примере конструктор класса муС1авв имеет следующий вид. 168 Часть!. язык С() ри)о1'с Муегв () ( х = 10; Обратите внимание на то, что этот конструктор обозначается как рн)з11с.
Дело в том, что он должен вызываться из кода, определенного за пределами его класса. В этом конструкторе переменной экземпляра класса МуС1а5 5 присваивается значение 10. Он вызывается в операторе пеи при создании объекта. Например, в следующей строке: МуС1ззз С1 = пен МуС1взз()г конструктор МуС1азз () вызывается для объекта 01, присваивая переменной его экземпляра 01. х значение 10.
То же самое происходит и для объекта 02. После конструирования переменная 02. х будет содержать то же самое значение 10. Таким образом, выполнение приведенного выше кода приведет к следующему результату. 10 10 Пара(иетризироаанные конструкторы В предыдущем примере использовался конструктор без параметров.