Перегрузка.
Методы
Некоторые более опытные ребята уже усекли перегрузку методов в листингах предыдущих статей. Какие же методы мы перегружали?
Мы уже перегружали конструкторы. И перегружали мы их по количеству параметров. В
большинстве примеров присутствуют конструктор по умолчанию, т.е. без параметров, и
конструктор с параметрами. Методы можно перегрузить по количеству параметров, а
также по типам аргументов. Благодаря перегрузке методов, объект может вести себя
по-разному, в зависимости от способа вызова метода. Приведем пример класса с
перегруженными методами. Количество форм метода условимся называть его степенью
перегрузки. Приведем пример класса с перегруженными методами (кто не знаком с
массивами, сейчас будем знакомить, массив - это набор элементов одного типа).
//Этуот пример можно было бы сделать красивее,
//с динамическим распределением, но некоторым
//это пока будет сложно
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. Итак, чтобы перегрузить метод, его достаточно просто повторно описать.
Список параметров у каждой формы метода должен быть уникальным. Перегрузка методов -
это неотъемлемая часть полиморфизма. При вызове метода выполняется та его форма,
аргументы которой подходят под заданные. С методами все. Теперь об операторах.