Перегрузка.

Методы

Некоторые более опытные ребята уже усекли перегрузку методов в листингах предыдущих статей. Какие же методы мы перегружали?
Мы уже перегружали конструкторы. И перегружали мы их по количеству параметров. В
большинстве примеров присутствуют конструктор по умолчанию, т.е. без параметров, и
конструктор с параметрами. Методы можно перегрузить по количеству параметров, а
также по типам аргументов. Благодаря перегрузке методов, объект может вести себя
по-разному, в зависимости от способа вызова метода. Приведем пример класса с
перегруженными методами. Количество форм метода условимся называть его степенью
перегрузки. Приведем пример класса с перегруженными методами (кто не знаком с
массивами, сейчас будем знакомить, массив — это набор элементов одного типа).

//Этуот пример можно было бы сделать красивее,
//
с динамическим распределением, но некоторым
//
это пока будет сложно
using Sc=System.Console;

class Matrix// класс матрицы
{
//
-Объявим-закрытый-член-класса———-
//
-Массив-10×10-целочисленных-переменных-
//
-Элементов-матрицы———————
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. Итак, чтобы перегрузить метод, его достаточно просто повторно описать.
Список параметров у каждой формы метода должен быть уникальным. Перегрузка методов —
это неотъемлемая часть полиморфизма. При вызове метода выполняется та его форма,
аргументы которой подходят под заданные. С методами все. Теперь об операторах.

Оставить мнение

Check Also

Алмазный фонд «Хакера». Самые крутые материалы по реверсингу и malware за три года

Иногда мы, редакторы и авторы «Хакера», сами читаем «Хакер». Нет, ну то есть мы постоянно …