Перегрузка.

Методы

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

//Этуот пример можно было бы сделать красивее,
//
с динамическим распределением, но некоторым
//
это пока будет сложно
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

LUKS container vs Border Patrol Agent. Как уберечь свои данные, пересекая границу

Не секрет, что если ты собрался посетить такие страны как США или Великобританию то, прежд…