ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.08.2024
Просмотров: 1100
Скачиваний: 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#. Урок 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#. Урок 35. Введение в атрибуты
Основы c#. Урок 36. Пример пользовательского атрибута.
Основы c#. Урок 37. Параметры командной строки
Основы c#. Урок 38. Метод Main в отдельном классе
Основы c#. Урок 39. Форматированный вывод
Основы c#. Урок 40. Класс System.Object
Основы c#. Урок 41. Методы класса System.Object
Основы c#. Урок 42. Переопределяем методы класса System.Object
Основы c#. Урок 44. Модификаторы доступа
Основы c#. Урок 45. Ссылка на текущий экземпляр класса (this)
Основы c#. Урок 47. Работаем со специальными папками
Основы c#. Урок 48. Получаем список всех дисков
Основы c#. Урок 49. Ввод/вывод в c# (System.Io)
Основы c#. Урок 50. Классы для работы с папками и файлами
Основы c#. Урок 51. Класс Directory
Основы c# Урок 53. Класс FileSystemInfo
Основы c# Урок 54. Класс DirectoryInfo
Основы c# Урок 55. Перечисление FileAttributes
Основы c#. Урок 5. Логические операторы
Как и в других C-подобных языках, в C# существуют следующие логические операторы:
Оператор |
Описание |
Пример |
&& |
Логическое И. Результат равен true, только если оба операнда равны true |
(x==8) && (y==5) |
|| |
Логическое ИЛИ. Результат равен false, только если оба операнда равны false |
(y>8) || (y<5) |
! |
Отрицание. Изменяет логическое значение на противоположное |
if(!(a==b))... |
Все эти операторы возвращают результат типа bool.
Обратите внимание, что для логического равно (т. е. для ответа на вопрос "Верно ли, что что-то равно чему-то") используется знак двойного равенства (==). Знак же одинарного равенства (=) используется для присваивания. Для знака == существует парный знак != ("не равно"). Так, приведенный выше пример для оператора ! можно переписать так:
if(!(a==b))...
Отметим, что в C#, в отличии от многих других языков программирования, нельзя вместо false использовать 0, а вместо true - любое ненулевое число. Так, следующий фрагмент содержит ошибку:
int k;
...
if(k) //Ошибка!
...
Основы c#. Урок 6. Массивы в c#
Массивы в C# несколько отличаются от других C-подобных языков. Начнем сразу с примеров. Пример первый:
...
int[] k;//k - массив
k=newint[3];//Определяем массив из 3-х целых
k[0]=-5; k[1]=4; k[2]=55; //Задаем элементы массива
//Выводим третий элемент массива
Console.WriteLine(k[2].ToString());
...
Смысл приведенного фрагмента ясен из комментариев. Обратите внимание на некоторые особенности. Во-первых, массив определяется именно как
int[] k;
а не как один из следующих вариантов:
intk[];//Неверно!
intk[3];//Неверно!
int[3] k;//Неверно!
Во-вторых, так как массив представляет из себя ссылочный объект, то для создания массива необходима строка
k=new int [3];
Именно в ней мы и определяем размер массива. Хотя, вообще говоря, возможны конструкции вида
int[] k = new int [3];
Элементы массива можно задавать сразу при объявлении. Вот пример:
int[] k = {-5, 4, 55};
Разумеется, приведенные конструкции применимы не только к типу int и не только к массиву размера 3.
В C#, как и в C/C++, нумерация элементов массива идет с нуля. Таким образом в нашем примере начальный элемент массива - это k[0], а последний - k[2]. Элемента k[3], разумеется, нет.
Теперь переходим к многомерным массивам. Вот так задается двумерный массив:
int[,] k = new int [2,3];
Обратите внимение, что пара квадратных скобок только одна. Естественно, что в нашем примере у массива 6 (=2*3) элементов (k[0,0] - первый, k[1,2] - последний).
Аналогично мы можем задавать многомерные массивы. Вот пример трехмерного массива:
int[,,] k = new int [10,10,10];
А вот так можно сразу инициализировать многомерные массивы:
int[,] k = {{2,-2},{3,-22},{0,4}};
Приведенные выше примеры многомерных массивов называются прямоугольными. Если их представить в виде таблицы (в двумерном случае), то массив будет представлять из себя прямоугольник.
Наряду с прямоугольными массивами существуют так называемые ступенчатые. Вот пример:
//Объявляем 2-мерный ступенчатый массив
int[][] k = new int [2][];
//Объявляем 0-й элемент нашего ступенчатого массива
//Это опять массив и в нем 3 элемента
k[0]=new int[3];
//Объявляем 1-й элемент нашего ступенчатого массива
//Это опять массив и в нем 4 элемента
k[1]=new int[4];
k[1][3]=22; //записываем 22 в последний элемент массива
...
Обратите внимание, что у ступенчатых массивов мы задаем несколько пар квадратных скобок (столько, сколько размерность у массива). И точно так же мы что-нибудь делаем с элементами массива - записываем, читаем и т. п.
Самая важная и интересная возможность у ступенчатых массивов - это их "непрямоугольность". Так, в приведенном выше примере в первой "строке" массива k три целых числа, а во второй - четыре. Часто это оказывается очень к месту.
Основы c#. Урок 7. Операторы if и switch
If служит для разветвления программы на два направления. Если некоторое условие выполняется, то программа идет в одну сторону, если не выполняется - то в другую. Вот сразу пример, определяющий, четное или нечетное число ввел пользователь:
...
class Class1
{
...
static void Main(string[] args)
{
int k = Int32.Parse(Console.ReadLine());
if(b)
{
Console.WriteLine("Четное число");
}
else
{
Console.WriteLine("Нечетное число");
}
Console.ReadLine();
}
}
Как и в других C-подобных языках, фигурные скобочки можно не писать в случае одного оператора. Также написание веточка else тоже не является необходимым - все зависит от конкретной задачи.
Оператор switch примеряется тогда, когда программа должна разделится более чем на два направления (т. е. будем двигаться или сюда, или сюда, или сюда). Вот пример:
int k = Int32.Parse(Console.ReadLine());
Console.WriteLine(k.ToString());
switch (k){
case 1:
case 2:
Console.WriteLine("Неудовлетворительно");
break;
case 3:
Console.WriteLine("Удовлетворительно");
break;
case 4:
Console.WriteLine("Хорошо");
break;
case 5:
Console.WriteLine("Отлично");
break;
default:
Console.WriteLine("Ошибка");
break;
}
В приведенном примере в зависимости от введенного пользователем числа на экран выводится та или иная оценка. Если число k не лежит в промежутке от 1 до 5, то выполняются операторы в веточке default и выводится надпись "Ошибка". Ветока default не обязательна. Обратите внимание на оператор break. Если его не написать, то будут выполнятся операторы из следующей веточки case до строки с break'ом (т. е. в данном примере если пользователь введет 1 или 2, то программы выведет "Неудовлетворительно"). Обратите внимание, что если в некоторой веточке case или default есть операторы, то написание break обязательно. Так, в следующих двух кусках кода есть ошибки:
...
case1:
Console.WriteLine("Совсем неудовлетворительно");
//Ошибка! Тут пропушен break
case 2:
Console.WriteLine("Неудовлетворительно");
break;
...
...
default:
Console.WriteLine("...");
//Ошибка! Тут пропушен break
}
Основы c#. Урок 8. Циклы for и foreach
Начнем сразу с примера цикла for:
intk = Int32.Parse(Console.ReadLine());
intsum=0;
for(int i=1; i<=k; i++){
sum+=i;
}
Console.WriteLine(sum);
Этот пример подсчитывает сумму чисел от 1 до введенного пользователем числа k. Сумма записывается в переменную sum и выводится на экран.
Очень часто циклы используются для некоторых действий с массивами. Так как нумерация элементов массива идет с нуля, то типичный цикл будет выглядеть так:
int[] a = {-5, 4, 55};
intsum=0;
for(int i=0; i<3; i++){
sum+=a[i];
}
В этом примере начальное значение для счетчика цикла равно нулю, и в условии продолжения цикла мы пишем знак "меньше", после которого ставится количество элементов в массиве. Разумеется, если в цикле должен выполнится только один оператор, то фигурные скобки можно не писать. Тут все, как в других C/C++-подобных языках.
Теперь рассмотрим пример цикла foreach:
int[] m = {-5, 4, 10};
intsum=0;
foreach(int i in m){
sum+=i;
}
В данном примере мы суммируем все элементы массива m, записывая сумму в sum.
В приведенном примере наш цикл перебирает все элементы массива m. На это нам указывает строка
...
foreach(int i in m){
...
которая интерпретируется так: для каждого целого числа из массива m делам что-то там. Если бы элементами массива были бы не целые, а, скажем, вещественные, то мы записали бы что-то вроде:
...
foreach(float i in m){
...
Т. е. мы пишем именно тип элементов массива. На самом деле foreach используется не только для массивов, но и для других объектов (например, для хэш-таблиц). Но это будет рассмотрено в последующих уроках.
Основы c#. Урок 9. Цикл while
Циклы while бывают двух видов - собственно цикл while и do-while. Оба эти цикла используются, как правило, тогда, когда точно не известно, сколько раз цикл должен выполнится. Например, при вводе пользователем пароля или при подсчете чего-либо с определенной точностью. Оба эти цикла будут выполняться до тех пор, пока условие в круглых скобках после слова while будет истинно. Как только условие станет равным false, выполнение цыкла прекращается. Самое важное отличие между while и do-while в том, что while может не выполниться ни одного раза, тогда как do-while по крайней мере один раз выполнится. Вот примеры их использования:
stringpassword;
do{
password=Console.ReadLine();
}while(password!="wi98zK");
intk=0;//Количество попыток
//заводим новую последовательность случайных чисел
Random rnd=newRandom(112);//Пишем любой параметр
while(rnd.Next(1, 6)!=5)
{
k++;
};
Console.WriteLine("С "+(k+1).ToString()+"-го раза выпало 5");
В первом примере цикл будет вращаться до тех пор, пока пользователь не введет правильный пароль (wi98zK), во втором - пока некоторое случайное число не окажеться равным 5. При этом если число с самого начала оказалось равным пяти, то цикл вообще выполняться не будет.
Основы c#. Урок 10. Классы в c#
Начиная с этого урока, приступаем к изучению классов.
Сначала пару слов о том, что такое классы. Представьте себе, что у вас есть некоторый объект, который характеризуется рядом свойств. Например, работник на некой фирме. У него есть такие свойства, как фамилия, возраст, стаж и т. п. Так вот, в этом случае удобно каждого работника описывать не рядом независимых переменных (строкового типа для фамилии, целого типа для возраста и стажа), а одной переменной типа Worker, внутри которой и содержатся переменные для фамилии, возраста и стажа. Это здесь самое важное - что в переменной типа Worker содержаться другие переменные. Конечно, типа Worker среди встроенных типов данных нет - ну так эта не беда - мы можем ввести его.
Еще одна важная вещь про классы - это то, что в классах помимо переменных разных типов содержатся функции (или, что тоже самое, методы) для работы с этими переменными. Скажем, в нашем примере с классом Worker логично ввесли специальные функции для записи возраста и стажа. Функции будут, в частности, проверять правильность вводимой информации. Например, ясно, что возраст у работника не может быть отрицательным или боольшим 150 ;). Так вот наша функция и будет проверять правильность введеного пользователем возраста.