[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Учим C#: №5
TwitДата: Воскресенье, 17.03.2013, 12:40 | Сообщение # 1
Нет аватара
Приятно Царь

Сообщений: 42
Награды: 7


« -5 »

Оффлайн
Перегрузка.

Методы

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




Кризис.Разные мнения.Идеи.

Первое правило шахмат - хочешь быть умнее? Играй с более умным соперником.
  • Страница 1 из 1
  • 1
Поиск: