Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы C#.doc
Скачиваний:
58
Добавлен:
10.02.2015
Размер:
430.59 Кб
Скачать

Основы c#. Урок 29. Пример передачи по ссылке

На этом уроке мы напишем функцию для решения квадратного уравнения. Эта функция будет передавать корни уравнения через ссылку - т. е. через свои два параметра. Всего же параметров будет пять - остальные три - это коэффициетны a, b, и c. Тип у функции будет int - она будет возвращать фактическое число корней (т. е. 0, 1 или 2).

Вот текст:

usingSystem;

namespacetest

{

class Test

{

static int GetSolution(out double x1, out double x2, double a, double b, double c)

{

double d=b*b-4*a*c; //Дискриминант

x1=x2=0;

//Два разных корня

if(d>0)

{

x1=(-b+Math.Sqrt(d))/(2*a);

x2=(-b-Math.Sqrt(d))/(2*a);

return2;

}

//Два совпадающих корня

if(d==0)

{

x1=-b/(2*a);

x2=-b/(2*a);

return 1;

}

//Корней нет

return 0;

}

public static void Main()

{

double x1, x2;

int n = GetSolution(out x1, out x2, 1, -5, 6);

switch(n)

{

case 1:

Console.WriteLine("Два совпадающих корня x1={0}, x2={1}", x1, x2);

break;

case 2:

Console.WriteLine("Два разных корня x1={0}, x2={1}", x1, x2);

break;

case 0:

Console.WriteLine("Корней нет");

break;

}

}

}

}

Запускаем программу. Программа должна выдать на экран "Два разных корня x1=3, x2=2".

Основы c#. Урок 30. Перегрузка

При перегрузке мы имеем в одной области видимости два или более одноименных метода. Для того, чтобы при компиляции не было ошибок, эти методы должны различаться или типом параметров, или их количеством (или и тем и другим).

Вот пример:

usingSystem;

namespacetest

{

class SomeClass{

//Первый метод SomeFunc.

public static int SomeFunc()

{

return 0;

}

//Второй метод SomeFunc.

public static int SomeFunc(int k)

{

return k*k;

}

//Третий метод SomeFunc.

public static float SomeFunc(float k)

{

return k;

}

}

class Test

{

static void Main(string[] args)

{

Console.WriteLine(SomeClass.SomeFunc());

Console.WriteLine(SomeClass.SomeFunc(10));

Console.WriteLine(SomeClass.SomeFunc((float)10));

}

}

}

Результатом выполнения прораммы будет 0 100 10.

Тут в классе SomeClass мы имеет три метода с одним названием - SomeFunc. Для простоты мы сделали все методы статическими, но это не важно. Наши методы различаются количеством параметров и типом. В тестовом классе Test мы вызываем эти методы. Обратите внимание на подсказку редактора - при написании метода SomeFunc возникает желтенькое окошко в котором написано "1 of 3" (т. е. первый метод из трех):

Если нажимать стрелочки вверх-вниз на клавиатуре, то появятся подсказки и по другим двум методам.

Обратите внимание на два момента. Во-первых, методы не могут различаться только типом возвращаемого значения - они должны различаться именно по параметрам. Например, такой метод добавить в класс SomeClass нельзя:

public static bool SomeFunc()

{

returntrue;

}

Во-вторых, в вызове третьего метода мы использовали приведение типов:

...

Console.WriteLine(SomeClass.SomeFunc((float)10));

...

Если бы мы вызвали метод без слова float, то вызвался бы перегруженный вариант для целых чисел.