Twit | Дата: Воскресенье, 17.03.2013, 12:40 | Сообщение # 1 |
 Приятно Царь
| Перегрузка.
Методы
Некоторые более опытные ребята уже усекли перегрузку методов в листингах предыдущих статей. Какие же методы мы перегружали? Мы уже перегружали конструкторы. И перегружали мы их по количеству параметров. В большинстве примеров присутствуют конструктор по умолчанию, т.е. без параметров, и конструктор с параметрами. Методы можно перегрузить по количеству параметров, а также по типам аргументов. Благодаря перегрузке методов, объект может вести себя по-разному, в зависимости от способа вызова метода. Приведем пример класса с перегруженными методами. Количество форм метода условимся называть его степенью перегрузки. Приведем пример класса с перегруженными методами (кто не знаком с массивами, сейчас будем знакомить, массив - это набор элементов одного типа). //Этуот пример можно было бы сделать красивее, //с динамическим распределением, но некоторым //это пока будет сложно using Sc=System.Console;
class Matrix// класс матрицы { //-Объявим-закрытый-член-класса---------- //-Массив-10x10-целочисленных-переменных- //-Элементов-матрицы--------------------- private int[,] element=new int[4,4]; //----Конструктор-по-умолчанию--------- public Matrix() { int i,j; //цикл для прохода по строкам for(i=0;i<4;i++) { //цикл для прохода по элементам строки for(j=0;j<4;j++) { //установка в 0 каждого элемента element[i,j]=0; } } } //----Конструктор-с-3мя-параметрами------ //-строка-столбец-и-значение------------- //-устанавливает-в-определенное-значение- //-определенный-элемент-а-остальные-в-0-- public Matrix(int line,int row,int value):this() { element[line,row]=value; } //----Конструктор-копирования------- //-создает-объект-на-основе-объекта- public Matrix(Matrix ob1) { int i,j; for(i=0;i<4;i++) { for(j=0;j<4;j++) { element[i,j]=ob1.element[i,j]; } } } //-теперь-определим-методы-присваивания-и--- //-получения-значения-определенному-элементу- public void SetValue(int line,int row,int value) { element[line,row]=value; } public int GetValue(int line,int row) { return element[line,row]; }
//-определим-перегруженный-метод-вывода- public void Print()//вывод всей матрицы { int i,j;//переменные для циклов for(i=0;i<4;i++) { for(j=0;j<4;j++) { Sc.Write(" "+GetValue(i,j)); } Sc.WriteLine(); }Sc.ReadLine(); } public void Print(int line)//вывод строки { int j; for(j=0;j<4;j++) { Sc.Write(" "+GetValue(line,j)); } Sc.WriteLine(); Sc.ReadLine(); } public void Print(int line,int row)//вывод элемента { Sc.WriteLine("Element["+line+","+row+"]="+GetValue(line,row)); } //-и-наконец-метод-ввода-всех-элементов- public void Scan() { int i,j,ii; for(i=0;i<4;i++) { string str1; ii=i+1; Sc.WriteLine("Enter string #"+ii); for(j=0;j<4;j++) { Sc.Write("Enter value for element["+i+","+j+"](then press Enter)=>"); str1=Sc.ReadLine(); //C# не позволяет считывать численные данные //непосредственно "в переменные". //считываем их в строку, затем "парсим". //читай после листинга element[i,j]=int.Parse(str1); } Sc.WriteLine(); } } }
class Application { public static void Main() { Matrix matrix1=new Matrix(); Matrix matrix2=new Matrix(3,3,3); matrix1.Scan(); Matrix matrix1_copy=new Matrix(matrix1);
Sc.Write("Matrix2->"); matrix2.Print(3,3);//вывод одного элемента Sc.WriteLine(); Sc.WriteLine("The very first line of matrix1:"); matrix1.Print(0);//вывод нулевой строки Sc.WriteLine("& finally the full matrix1_copy"); matrix1_copy.Print();//вывод всей матрицы } } Каждый тип, как я уже сказал - это класс. В каждом классе численного типа определен метод Parse(string str), который преобразует переданную ему строку в число и возвращает это число. Тип, возвращаемый методом, идентичен типу, описанному в классе. Обращение к методу производится следующим образом: псевдо_имя_типа.Parse(строка); Где псевдо_имя_типа - это просто название типа в C#. Вообще, честно говоря, применение консольного режима ограничено. А теперь о проге. В ней перегружены два метода. Степень перегрузки обоих методов равна 3. Итак, чтобы перегрузить метод, его достаточно просто повторно описать. Список параметров у каждой формы метода должен быть уникальным. Перегрузка методов - это неотъемлемая часть полиморфизма. При вызове метода выполняется та его форма, аргументы которой подходят под заданные. С методами все. Теперь об операторах.
Кризис.Разные мнения.Идеи.
Первое правило шахмат - хочешь быть умнее? Играй с более умным соперником.
|
|
| |