ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.08.2024

Просмотров: 1087

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Основы 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#. Урок 27. Строки (класс StringBuilder)

На этом уроке мы рассмотрим другой класс для работы со строками - класс StringBuilder. Он принадлежит пространству имен System.Text

Этот класс работет быстрее, чем класс String, так как при изменении строки, созданной как экземпляр класса String, у нас создается каждый раз новый экземпляр класса, а старый уничтожается, при использовании же класса StringBuilder расходов на создание-уничтожение экземпляра класса нет - мы работаем всегда с одним экземпляром.

Обратите внимание, что для этого класса мы не можем использовать простое присваивание:

StringBuilder s="abc"; //Неправильно!

В этом случае мы долны действовать так:

StringBuilder s=new StringBuilder("abc"); //Правильно

У класса StringBuilder нет статических методов. Все его методы - динамические. Ниже перечислены основные свойства и методы класса StringBuilder:

Свойство Length. Возвращает длину строки. Пример использования:

intk=s.Length;

Свойство только для чтения MaxCapacity. Дает максимальное количество символов, которые можно записать в объект типа StringBuilder. Пример использования:

System.Console.WriteLine(s.MaxCapacity);

Метод Append. Прибавляет строку к существующей. Пример использования:

StringBuilder s1=new StringBuilder("Cogito ");

StringBuilder s2=new StringBuilder("ergo ");

s1.Append(s2);

s1.Append("sum");

System.Console.WriteLine(s1); //Напечатается "Cogito ergo sum"

Метод Equals. Служит для сравнения двух строк. Возвращает true или false. Пример использования:

if(s1.Equals(s2))

System.Console.WriteLine("Строки равны");

else

System.Console.WriteLine("Строки не равны");

Метод Insert. Вставляет символы в заданную позицию (Нумерация идет с нуля). Пример использования:

StringBuilder s1=new StringBuilder("abcde");

s1.Insert(2, "xyz");

System.Console.WriteLine(s1); //Напечатается "abxyzcde"

Метод Remove. Удаляет символы из строки. Пример использования:

StringBuilder s1=new StringBuilder("abcde");

s1.Remove(1, 2);

System.Console.WriteLine(s1); //Напечатается "ade"

Певый параметр у Remove - это с какой позиции удаляем (нумерация с нуля), второй - сколько символов удаляем.

Метод Replace. Заменяет символы. Пример использования:

StringBuilder s=new StringBuilder("abcdeabcde");

s.Replace("abc", "ZZZ");

System.Console.WriteLine(s); //Напечатается "ZZZdeZZZde"

Основы c#. Урок 28. Передача параметров по ссылке и по значению (ref и out)

Если мы передаем в некоторую функцию параметр, то функция по умолчанию работает с копией параметра, а не с оригиналом. Это называется перередача по значению. При этом при изменении передаваемого параметра внутри функции значение соответствующей переменной вне функции не изменится. Иногда же нам надо, что бы функция действительно изменяла передаваемые в нее параметры. Для этого мы должны передавать их по ссылке. Для этого мы используем ключевое слово ref. Вот пример:


classTest

{

static void SomeFunction1(int a)

{

a=12; //Изменяем копию параметра функции

}

static void SomeFunction2(ref int a)

{

a=55; //Изменяем оригинал параметра функции

}

public static void Main()

{

int z=23;

SomeFunction1(z);

Console.WriteLine(z); //Напечатается 23

SomeFunction2(ref z);

Console.WriteLine(z); //Напечатается 55

}

}

Обратите внимание, что при вызове функции SomeFunction2 мы опять используем ключевое слово ref (как и при объявлении этой функции):

...

SomeFunction2(ref z);

...

Параметр out аналогичен параметру ref, только при его использовании в функцию можно передавать неинициализированные переменные (т. е. переменные с незаданными начальными значениями). Вот пример:

classTest

{

static void SomeFunction2(ref int a)

{

a=55;

}

static void SomeFunction3(out int a)

{

a=66;

}

public static void Main()

{

intz=0;//Переменную z надо обязательно инициализировать

SomeFunction2(ref z);

Console.WriteLine(z); //Напечатается 55

inty;//Переменную y можно не инициализировать

SomeFunction3(out y);

Console.WriteLine(y); //Напечатается 66

}

}

При вызове такой функции обязательно использование ключевого слова out.


Основы 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, то вызвался бы перегруженный вариант для целых чисел.


Основы c#. Урок 31. Функции класса System.Array

Массивы в C# основаны на классе System.Array. У этог класса, как и у любого другого, есть разные полезные методы.

Вот пример:

usingSystem;

namespacetest

{

class Test

{

static void Main(string[] args)

{

//Объявление массива.

int[] num = {4, -5, 2, 0, 23};

//Выводим массив.

foreach (int i in num)

{

Console.WriteLine(i.ToString());

}

//Переворачиваем массив.

Console.WriteLine("Перевернутый массив");

Array.Reverse(num);

foreach (int i in num)

{

Console.WriteLine(i.ToString());

}

//Сортируем массив.

Array.Sort(num);

Console.WriteLine("Отсортированный массив");

foreach (int i in num)

{

Console.WriteLine(i.ToString());

}

//Обнуляем массив.

Array.Clear(num, 0, 5);

Console.WriteLine("Обнуленный массив");

foreach (int i in num)

{

Console.WriteLine(i.ToString());

}

}

}

}

Тут мы используем статические методы класса Array для сортировки, переворачивания и очистки массива. Разумеется, эти методы не единственные.

В классе Array есть, например, еще встроенный статический метод IndexOf предназначенный для поиска элемента в массиве. Вот пример его использования:

...

intk=-5;

Console.WriteLine("Число {0} находится на {1} месте.", k, Array.IndexOf(num, k));

...

Этот метод возвращает индекс искомого элемента (нумерация с нуля). Если такого элемента нет, то возвращается -1.

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

Как видите, с массивами в C# можно автоматически делать много чего полезного. В Visual C++, например, такого удобства не было.

Основы c#. Урок 33. События

На этом занятии мы с вами рассмотрим создание событий в C#. С помощью событий класс извещает, что в нем что-то произошло. События часто создаются в классах используемых для создания пользовательского интерфейса - например у кнопки есть событие, наступающее при щелчке на этой кнопке. События также могут присутствовать и в классах, не предназначенных для создания пользовательского интерфейча - например, они могут быть в классах консолького приложения. Именно для такого класса мы и рассмотрим создание события.