ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.08.2024
Просмотров: 1099
Скачиваний: 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
Здесь мы используем внутри кавычек подстановочные знаки {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.