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

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

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

Добавлен: 13.08.2024

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

Скачиваний: 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. Пример: получение имен всех подпапок

Здесь мы используем внутри кавычек подстановочные знаки {0}, {1} и т. д. (нумерация в них идет с нуля). Переменные при этом выводятся в формате по умолчанию. Для вывода в определеном формате надо использовать подстановочные знаки с параметрами. Вот некоторые их них:

  • d - десятичный формат. Позволяет задать общее количество знаков (при необходимости число дополняется слева нулями).

  • f - формат с фиксированной точностью. Позволяет задать количество знаков после запятой.

  • x - шестнадцатеричный формат.

  • c - денежный формат (добавляет знак доллара и показывает два знака после запятой).

  • e - вывод числа в экспоненциальной форме.

А вот пример их использования:

...

int a=38;

//Выведется 0038

Console.WriteLine("a={0:d4}", a);

double pi=3.1415926;

//Выведется 3.14

Console.WriteLine("pi={0:f2}", pi);

intb=255;

//Выведется FF.

Console.WriteLine("b={0:X}", b);

intc=255;

//Выведется ff.

Console.WriteLine("c={0:x}", c);

doubled=1003.214;

//Выведется $1, 003.14 в английской версии Windows и

//1 003,14 р. в русской.

Console.WriteLine("d={0:c}", d);

double e=213.1;

//Выведется 2.131000e+002

Console.WriteLine("e={0:e}", e);

...

Параметры подстановочных знаков можно использовать как строчные, таки и прописные - это все равно. Исключение - вывод числа в шестнадцатеричном виде (при использовании h цифры a, ..., f будут строчными, при использовании H - прописными).


Основы c#. Урок 40. Класс System.Object

Класс System.Object является предком для всех классов. Это происходит неявным образом - при объявлении класса мы System.Object не указываем в качестве класса предка. Хотя это и можно сделать (результат будет одним и тем же):

class Test:System.Object

{

...

}

То, что все классы являются потомками класса System.Object, позволяет нам использовать методы последнего.

Еще одно из следствий этого - это возможность записать в переменную типа System.Object экземпляр любого класса:

//Некоторый класс.

classTest

{

public string s;

}

class App

{

static void Main()

{

Object ob;

//Записываем в ob экземпляр класса-потомка Test.

ob=new Test();

//Приводим ob к типу Test.

((Test)ob).s="some string";

//Выводим значение поля s.

Console.WriteLine(((Test)ob).s);

}

}

Указанный фрагмент выведет, естественно, строку "some string".

Основы c#. Урок 41. Методы класса System.Object

В классе System.Object имеются следующие методы:

  • Equals - виртуальный метод, возвращающий True, если два объекта расположены в одном месте памяти (второй объект передается в качестве параметра).

  • GetHashCode - виртуальный метод, возвращает некоторое целое число (хэш-код), однозначно идентифицирующее экземпляр класса.

  • GetType - возвращает объект типа Type, описывающий соответствующий тип.

  • ToString - виртуальный метод, по умолчанию возвращает строку, представляющую полное имя типа объекта.

Вот пример использования этих методов:

Object ob1, ob2;

ob1=new System.Object();

ob2=ob1;

//Выведется True.

Console.WriteLine(ob1.Equals(ob2));

ob2=new System.Object();

//Выведется False.

Console.WriteLine(ob1.Equals(ob2));

//Выведется некотрое число.

Console.WriteLine(ob1.GetHashCode());

//Выведется System.Object.

Console.WriteLine(ob1.GetType());

//Выведется System.Object.

Console.WriteLine(ob1.ToString());

Виртуальные методы класса System.Object часто переписывают в классах-потмках.

Основы c#. Урок 42. Переопределяем методы класса System.Object

Часть методов класса System.Object, рассмотренных на прошлом уроке, были виртуальными. Это значит, что мы можем переписать их в классе-потомке. Давайте для примера перепишем в нашем классе Vector метод ToString так, чтобы он возвращал не имя класса, а координаты вектора в красивом виде. Это будет выглядеть вот так:


class Vector

{

public float x, y; //Координаты.

//Переопределяем метод ToString.

public override string ToString()

{

return "x = " + x +", y = " + y;

}

}

//Тестовый класс.

classApp

{

static void Main()

{

Vector v=new Vector();

v.x=2;

v.y=3;

//Выводим координаты вектора.

Console.WriteLine(v.ToString());

}

}

А в следующем примере мы переопределим виртуальный метод Equals таким образом, чтобы считать равными два вектора с одинаковой длиной (вспомним теорему Пифагора):

classVector

{

...

//Переопределяем метод Equals.

public override bool Equals(object ob)

{

Vector t=(Vector)ob;

return (t.x*t.x+t.y*t.y)==(this.x*this.x+this.y*this.y);

}

}

//Тестовый класс.

classApp

{

static void Main()

{

Vector v1=new Vector();

v1.x=2;

v1.y=3;

Vector v2=new Vector();

v2.x=-3;

v2.y=2;

Console.WriteLine(v1.Equals(v2));

}

}

В тестовом классе мы проверяем действие переопределенного метода для равных по длине векторов (2, 3) и (-3, 2). Указанный фрагмент выведет True.


Основы c#. Урок 43. Константы

Константы удобны использовать для величин, которые в программе не меняются. Использование констант позволяет изменить некоторую величину везде в программе за пару секунд - легче изменить значение в одном месте, чем по всей программе.

Константа определяется ключевым словом const. Вот пример:

classMyClass

{

//Объявление константы.

public const int SomeValue=20;

...

}

Обратите внимание, что константы, как и все в C#, определяется в классе.

Часто в программе заводят некоторый вспомогательный класс, главное предназначение которого - это хранение в одном месте всех констант программы. Например, такой класс может выглядеть так:

abstract class Constants

{

public const int SomeValue1=20;

public const int SomeValue2=100;

public const double SomeValue3=0.35;

}

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

Использовать этот класс можно так:

class App

{

static void Main()

{

double z;

z=Constants.SomeValue2 * Constants.SomeValue3;

Console.WriteLine("z={0}", z); //Выведется 35.

}

}

Основы c#. Урок 44. Модификаторы доступа

Члены класса (поля, методы и т. п.) могут иметь разные модификаторы доступа. Вот они:

Модификатор доступа

Описание

public

Доступность откуда угодно.

private

Доступность только из этого же самого класса (по умолчанию).

protected

Доступность только из этого же самого класса или его потомков.

internal

Доступность из любого класса той же программы.

protected internal

Доступность или из любого класса той же программы или из этого же самого класса или его потомков (т. е.или как protected или как internal)

Модификаторы доступа пишутся первыми - перед всеми другими коючевыми словами (например, типом переменной). Модификатор static может стоять как перед модификатором доступа, так и после:

...


static public int a;

public static int b;

...

В отличие от C/C++ модификаторы доступа пишутся для любого члена класса (как в Java):

class SomeClass

{

//Правильно.

public void f1()

{

//...

}

public void f2()

{

//...

}

...

Основы c#. Урок 45. Ссылка на текущий экземпляр класса (this)

Ссылка на текущий экземпляр класса делается через ключевое слово this. Вот традиционный пример:

class SomeClass

{

public int a;

SomeClass(int a)

{

this.a=a;

}

}

В этом примере у нас и переменная класса, и параметр метода названы одинаково - a. Для уточнения, что мы используем именно переменную класса, а не параметр метода, и служит слово this.

В C++ же для избегания конфликта имен обычно к переменной класса прибывлялся префикс m_.

Еще одна возможность по использованию ключевого слова this - это вызов одного конструктора из другого. Вот пример:

class SomeClass

{

public int a;

public int b;

//Конструктор с 2-я параметрами.

public SomeClass(int a, int b)

{

this.a=a;

this.b=b;

}

//Конструктор без параметров,

//вызывающий конструктор с 2-я параметрами.

public SomeClass():this(1, 1)

{

}

}

//Тестовый класс.

classApp

{

static void Main()

{

SomeClass s=new SomeClass();

Console.WriteLine("a={0}, b={0}", s.a, s.b);

}

}

Здесь в классе SomeClass два конструктора. Второй конструктор (без параметров) вызывает первый (передавая в него значения 1 и 1):

...

public SomeClass():this(1, 1)

...

Указанный фрагмент выведет, разумеется, a=1, b=1.