Г. Шилдт - Полный справочник по C# (1160789), страница 28
Текст из файла (страница 28)
В частности, нет необходимости в использовании переменнойareaPP. Вызов метода areaPerPerson () можно реализовать непосредственно в инструкции вызова метода WriteLine ():Console.WriteLine("Дом имеет:\n " +h o u s e . f l o o r s + " этажа\п " +IГлава 6. Введение в классы, объекты и методы139house.occupants + " жильца\п " +house.area + " общей площади, из них\п " +house.areaPerPerson() +11приходится на одного человека");В этом случае при вызове метода WriteLineO автоматически вызывается методhouse.
areaPerPerson (), и возвращаемое им значение передаетсяметодуWriteLine (). Более того, теперь обращение к методу house. areaPerPerson () можно использовать везде, где необходимо значение площади для объекта классаBuilding, которая приходится на одного человека. Например, в следующей инструкции сравниваются такие значения площадей двух зданий.If (bl.areaPerPerson() > Ь2.areaPerPerson())Console.WriteLine("В здании Ы больше места для каждого ч е л о в е к а .
" ) ;IИспользование параметровПри вызове методу можно передать одно или несколько значений. Как упоминалось выше, значение, передаваемое методу, называется аргументом. Переменная внутри метода, которая принимает значение аргумента, называется параметром. Параметры объявляются внутри круглых скобок, которые следуют за именем метода. Синтаксис объявления параметров аналогичен синтаксису, применяемому для переменных.Параметр находится в области видимости своего метода, и, помимо специальной задачи получения аргумента, действует подобно любой локальной переменной.Перед вами простой пример использования метода с параметром. В классе ChkNumопределен метод i s Prime, который возвращает значение t r u e , если переданное емузначение является простым, и значение f a l s e в противном случае.
Следовательно,метод i s Prime возвращает значение типа bool.// Простой пример использования параметра.using System;c l a s s ChkNum {// Метод возвращает t r u e , если х - простое число,public bool isPrime(int x) {for(int i=2; i < x/2 + 1; i++)if((x %i) == 0) return false;return t r u e ;class ParmDemo {public s t a t i c void Main() {ChkNum ob = new ChkNum();for(int i = l ; i < 10;if(ob.isPrime(i)) Console.WriteLine(i +" простое число.");else Console.WriteLine(i + " не простое число.");Эта программа генерирует следующие результаты:140Часть I.
Язык С#123456789простое число.простое число.простое число.не простое число.простое число.не простое число.простое число.не простое число.не простое число.,В этой программе метод isPrime вызывается девять раз, и каждый раз ему передается новое значение. Рассмотрим этот процесс более внимательно. Во-первых, обратите внимание на то, как происходит обращение к методу isPrime. Передаваемыйаргумент указывается между круглыми скобками. При первом вызове метода isPrimeему передается значение 1.
Перед началом выполнения этого метода параметр х получит значение 1. При втором вызове аргумент будет равен числу 2, а значит, и параметр получит значение 2 и т.д. Важно то, что значение, переданное как аргумент привызове функции isPrime, представляет собой значение, получаемое параметром х.Метод может иметь более одного параметра. В этом случае достаточно объявитькаждый параметр, отделив его от следующего запятой. Расширим, например, уже знакомый нам по предыдущей программе класс ChkNum, добавив в него метод l e d ( ) , который возвращает наименьший общий знаменатель (/east common denominator) дляпередаваемых ему значений.// Добавляем метод, который принимает два аргумента.using System;class ChkNum {// Метод возвращает true, если х - простое число,public bool isPrime(int x) {f o r ( i n t i=2; i < x/2 + 1; i++)i f ( ( x %i) == 0) return false;return t r u e ;// Метод возвращает наименьший общий знаменатель,public int led(int a, int b) {int max;if(isPrime(a) | isPrime(b)) return 1;max = a < b ? a : b;for(int i=2; i < max/2 + 1;if(((a%i) == 0) & ((b%i) == 0)) return i;return 1;class ParmDemo {public static void Main() {ChkNum ob = new ChkNumO;int a, b;for(int i=l; i < 10;iГлава 6.
Введение в классы, объекты и методы141if(ob.isPrime (i))Console.WriteLine(i +" простое число.");else Console.WriteLine(i + " не простое число.");a = 7;b = 8;Console.WriteLine("Наименьший общий знаменатель для " +а + " и " + b + " равен " +ob.lcd(a, b ) ) ;а = 100;b = 8;Console.WriteLine("Наименьший общий знаменатель для " +а + " и " + b + " равен " +ob.lcd(a, b));а = 100;b = 75;Console.WriteLine("Наименьший общий знаменатель для " +а + " и " + b + " равен " +ob.lcd(a, b));Обратите внимание на то, что при вызове метода l c d ( ) аргументы также разделяе т с я запятыми. Вот результаты выполнения этой программы:1 простое число.2 простое число.3 простое число.4 не простое число.5 простое число.6 не простое число.7 простое число.8 не простое число.9 не простое число.Наименьший общий знаменатель для 7 и 8 равен 1Наименьший общий знаменатель для 100 и 8 равен 2Наименьший общий знаменатель для 100 и 75 равен 5При передаче методу нескольких параметров каждый из них должен сопровождаться указанием собственного типа, причем типы параметров могут быть различными.
Например, следующая запись вполне допустима:int myMeth(int a, double b, float с) {// . . .IДобавление параметризованного метода в класс B u i l d i n gДля добавления в класс B u i l d i n g нового средства (вычисления максимально допустимого количества обитателей здания) можно использовать параметризованныйметод. При этом предполагается, что площадь, приходящаяся на каждого человека, недолжна быть меньше определенного минимального значения. Назовем этот новыйметод maxOccupant () и приведем его определение./* Метод возвращает максимальное количество человек,если на каждого должна приходиться заданнаяминимальная площадь. */I142*Часть I.
Язык С #I public int maxOccupant(int minArea) {1return area / minArea;I}При вызове метода maxOccupant () параметр minArea получает значение минимальной площади, необходимой для жизнедеятельности каждого человека. Результат,возвращаемый методом maxOccupant ( ) , получается как частное от деления общейплощади здания на это значение.ПриведемполноеопределениеклассаBuilding,включающееметодmaxOccupant()./*Добавляем параметризованный метод, вычисляющиймаксимальное количество человек, которые могутзанимать это здание в предположении, что на каждогодолжна приходиться заданная минимальная площадь.*/using System;class Building {public int floors;// количество этажейpublic int area;// общая площадь зданияpublic int occupants; // количество жильцов// Метод возвращает площадь, которая приходится/ / н а одного человека,public int areaPerPerson() {return area / occupants;}/* Метод возвращает максимальное возможное количествочеловек в здании, если на каждого должна приходитьсязаданная минимальная площадь.
*/public int maxOccupant(int minArea) {return area / minArea;// Использование метода maxOccupant().c l a s s BuildingDemo {p u b l i c s t a t i c void Main() {Building house = new B u i l d i n g ( ) ;Building office = new B u i l d i n g ( ) ;// Присваиваем значения полям в объекте house,house.occupants = 4;house.area = 2500;h o u s e . f l o o r s = 2;// Присваиваем значения полям в объектеo f f i c e . o c c u p a n t s = 25;o f f i c e .
a r e a = 4200;o f f i c e . f l o o r s = 3;office,Console.WriteLine("Максимальное число человек для дома, \п" +"если на каждого должно приходиться " +300 + " квадратных футов: " +Глава 6. Введение в классы, объекты и методы143house.maxOccupant(300));Console.WriteLine("Максимальное число человек для офиса, \п" +"если на каждого должно приходиться " +300 + " квадратных футов: " +office.maxOccupant(300));Результаты выполнения этой программы выгладят так.,Максимальное число человек для дома,если на каждого должно приходиться 300 квадратных футов: 8Максимальное число человек для офиса,если на каждого должно приходиться 300 квадратных футов: 14Как избежать написания недостижимого кодаПри создании методов старайтесь не попадать в ситуации, когда часть кода ни прикаких обстоятельствах не может быть выполнена.
Никогда не выполняемый код называется недостижимым и считается некорректным в С#. Компилятор при обнаружениитакого кода выдаст предупреждающее сообщение. Вот пример:public void m() {char a, b;if(a==b) {Console.WriteLine("равны");return;} else {Console.WriteLine("не равны");return;}Console.WriteLine("Это недостижимый код.");}Здесь последняя инструкция вызова метода WriteLine () в методе т ( ) никогда небудет выполнена, поскольку до нее при любых обстоятельствах будет совершен выходиз метода m (). При попытке скомпилировать этот метод вы получите предупреждение.