
- •12. Фундаментальные принципы ооп
- •13. Методы
- •14. Конструкторы и деструкторы
- •15. Структуры и перечисления
- •16. Свойства и поля класса
- •18. Анонимные типы
- •20. Расширяющие методы.
- •19. Перегрузка операций в классе. Явное и неявное преобразование типов. Ограничения на преобразование типов.
- •17. Статические поля, методы, конструкторы, классы.
- •2. Типы данных
- •3. Базовые типы
- •Унарные операции Можно определять в классе следующие унарные операции:
- •Бинарные операции
- •5.Выражения (порядок их вычисления, тип результата, оператор присваивания).
- •6.Операторы ветвления (if, switch, case, break , goto case).
- •Оператор break
- •Оператор goto-оператор безусловного перехода. Когда в программе встречается оператор goto, ее выполнение переходит непосредственно к тому месту, на которое указывает этот оператор.
- •7. Операторы цикла (for, while, do-while, foreach, break continue).
- •8. Обработка исключений (операторы обработки исключений, класс Exception, создание объектов Exception, захват исключения, последовательность обработки исключений, классы Debug и Trace)
- •9. Массивы (одномерные, многомерные и ступенчатые массивы, класс Array).
- •Многомерные массивы
- •Ступенчатые массивы
- •10. Создание и подключение сборок. Пространства имен (ключевые слова using, namespace)
- •11. Сложение:
- •14. Структурные блоки платформы .Net: cli, clr, cls, cts.
- •17. Таблица приоритетов операций, соответствующая Common Language Specification (cls)
- •21. Интерфейс программирования приложений WinForms.
- •22. Интерфейс программирования приложений wpf.
- •24.Кодирование символов (ascii, utf, utf-8, utf-16)
- •3.Вопросы по c# часть 1
- •22 Делегаты
- •23 События
- •24 Наследование классов
- •25 Интерфейсы
- •26 Шаблоны и интерфейс iEnumerable
- •27 Динамический тип данных
- •Статический класс Environment.
- •2) Класс DriveInfo.
- •3) Классы для работы с каталогами (папками) (System.Io.Directory, System.Io.DirectoryInfo)
- •9.2.3. Создание подпапок с помощью класса DirectoryInfo
- •9.3. Работа с классом Directory
- •9.4. Работа с классом DriveInfo
- •Классы для работы с файлами (System.Io.File, System.Io.FileInfo).
- •9.1. Абстрактный базовый класс FileSystemInfo
19. Перегрузка операций в классе. Явное и неявное преобразование типов. Ограничения на преобразование типов.
Для объектов класса можно описать порядок выполнения операций путем описания статических методов, имя которых состоит из ключевого слова operator после которого стоит знак переопределяемой операции (т.е. "operator X", где X – символ перегружаемого операции).
Например: public static Complex operator +(Complex c1,Complex c2)
{...}
В качестве параметров данного метода используются операнды, участвующие в операции.
Унарные операции имеют один параметр,
бинарные – два параметра.
В каждом случае один параметр должен быть такого же типа, как класс, в котором переопределяется операция.
Неявное преобразование типов (implicit conversion)
Для описания неявного (по умолчанию) преобразования необходимо в описание класса включить:
статический метод с атрибутом implicit и
именем, состоящим из ключевого слова operator, после которого стоит название типа, в который будет выполняться преобразование.
в качестве параметра данного метода описывается переменная того типа, который будет преобразовываться.
// в описании Point – неявное преобразование в тип int public static implicit operator int(Point p) { int n; n = p.x; return n;} |
Point p = new Point(5,6); int a; a = p + 2; |
Явное преобразование типов (explicit conversion)
Описание явного преобразования выполняется аналогично описанию неявного преобразования, но перед статическим методом нужно задавать атрибут explicit.
Пример описания явного преобразования приведен ниже:
// в классе Fahrenheit явное преобразование в Celsius
public static explicit operator Celsius(Fahrenheit f) {
return new Celsius((5.0f/9.0f)*(f.degrees-32));
}
Пример использования явного преобразования:
Fahrenheit f = new Fahrenheit(100.0f);
Celsius c = (Celsius)f;
Ограничения на преобразование типов.
Следует знать о некоторых ограничениях на описание преобразований типов:
Нельзя задать преобразование типов, если один класс является производным от другого класса (компилятор уже знает, как выполнять преобразования между наследуемыми классами).
Преобразование должно быть описано только в одном из классов (в исходном или результирующем типе).
Описание преобразований будет выглядеть следующим образом (если задавать явное преобразования, что является обычным для пользовательских классов):
-
p
ublic static explicit operator D(C value)
{
//описание преобразования класса C в класс D
}
public static explicit operator C(D value)
{
//описание преобразования класса D в класс C
}
Такие преобразования можно поместить или в класс C или в класс D, но не в каждый из них.