- •Основы c#. Урок 1. Что такое c#?
- •Основы c#. Урок 2. Что такое net Runtime?
- •Основы c#. Урок 3. Первая программа на c#
- •Основы c#. Урок 4. Переменные языка c#
- •Основы c#. Урок 5. Логические операторы
- •Основы c#. Урок 6. Массивы в c#
- •Основы c#. Урок 7. Операторы if и switch
- •Основы c#. Урок 8. Циклы for и foreach
- •Основы c#. Урок 9. Цикл while
- •Основы c#. Урок 10. Классы в c#
- •Основы c#. Урок 11. Конструкторы классов
- •Основы c#. Урок 12. Наследование
- •Основы c#. Урок 13. Запись в экземпляр базового класса экземпляра производного
- •Основы c#. Урок 14. Вложенные классы
- •Основы c#. Урок 15. Перегрузка бинарных операторов
- •Основы c#. Урок 16. Перегрузка унарных операторов
- •Основы c#. Урок 17. Область видимости
- •Основы c#. Урок 18. Виртуальные функции
- •Основы c#. Урок 19. Абстрактные классы
- •Основы c#. Урок 20. Запрещение наследования или модификатор sealed
- •Основы c#. Урок 21. Статические переменные
- •Основы c#. Урок 22. Статические методы класса
- •Основы c#. Урок 23. Статические конструкторы
- •Основы c#. Урок 24. Закрытые конструкторы или классы без экземпляров
- •Основы c#. Урок 25. Передача параметров переменой длины
- •Основы c#. Урок 26. Строки (класс System.String)
- •Основы c#. Урок 27. Строки (класс StringBuilder)
- •Основы c#. Урок 28. Передача параметров по ссылке и по значению (ref и out)
- •Основы c#. Урок 29. Пример передачи по ссылке
- •Основы c#. Урок 30. Перегрузка
- •Основы c#. Урок 31. Функции класса System.Array
- •Основы c#. Урок 33. События
- •Основы c#. Урок 35. Введение в атрибуты
- •Основы c#. Урок 36. Пример пользовательского атрибута.
- •Основы c#. Урок 37. Параметры командной строки
- •Основы c#. Урок 38. Метод Main в отдельном классе
- •Основы c#. Урок 39. Форматированный вывод
- •Основы c#. Урок 40. Класс System.Object
- •Основы c#. Урок 41. Методы класса System.Object
- •Основы c#. Урок 42. Переопределяем методы класса System.Object
- •Основы c#. Урок 43. Константы
- •Основы c#. Урок 44. Модификаторы доступа
- •Основы c#. Урок 45. Ссылка на текущий экземпляр класса (this)
- •Основы c#. Урок 47. Работаем со специальными папками
- •Основы c#. Урок 48. Получаем список всех дисков
- •Основы c#. Урок 49. Ввод/вывод в c# (System.Io)
- •Основы c#. Урок 50. Классы для работы с папками и файлами
- •Основы c#. Урок 51. Класс Directory
- •Основы c# Урок 52. Класс File
- •Основы c# Урок 53. Класс FileSystemInfo
- •Основы c# Урок 54. Класс DirectoryInfo
- •Основы c# Урок 55. Перечисление FileAttributes
- •Основы c# Урок 56. Класс FileInfo
- •Основы c# Урок 57. Пример: получение имен всех подпапок
Основы 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, то вызвался бы перегруженный вариант для целых чисел.