- •1).Net Framework: общая характеристика, основные компоненты.
- •2).Net Framework: виртуальная машина и управляемый код
- •3) Алфавит языка c#. Лексемы: идентификаторы, ключевые слова, неименованные компоненты.
- •4) Типы данных языка с#: концепция, основные типы.
- •5) Переменные: правила описания, инициализация.
- •Область видимости переменных
- •6) Операции языка c#. Правила вычисления выражений.
- •1) Операция присваивания
- •2) Арифметические операции
- •3) Поразрядные операции
- •4) Операции отношения:
- •5) Логические операции:
- •6) Операция «приведение к типу»:
- •7) Строковые преобразования. Класс Convert:
- •8) Понятие исключения:
- •7) Операторы языка c#. Составной оператор. Блок. Метки
- •1) Оператор присваивания:
- •2) Вызов метода:
- •3) Блок или составной оператор:
- •4) Операторы ветвления:
- •5) Операторы цикла:
- •5.1. Оператор for:
- •5.2. Оператор while:
- •5.3. Оператор foreach:
- •6) Операторы перехода:зззззззззззззз
- •6.1. Оператор goto:
- •6.2. Операторы break и continue:
- •6.3. Оператор return:
- •9) Операторы цикла.
- •5.1. Оператор for:
- •5.2. Оператор while:
- •5.3. Оператор foreach:
- •10) Операторы передачи управления.
- •11) Логические и поразрядные операции языка с#.
- •12) Классы. Основные понятия, спецификаторы доступа.
- •13) Создание объектов. Понятие ссылки.
- •14) Массивы: одномерные, многомерные, невыровненые, массивы объектов.
- •Инициализация
- •Инициализация в цикле программы
- •Класс System.Array
- •15) Строковый тип данных string.
- •16) Методы: назначение, определение, вызов.
- •17) Возврат методом значений. Тип void.
- •18) Рекурсивные методы.
- •19) Перегрузка методов.
- •20) Конструкторы. Назначение, определение, вызов.
- •Вызов конструктора из других конструкторов
- •Конструкторы производных классов
- •21) Деструкторы. Назначение, определение, вызов.
- •Деструкторы Dispose() и Close()
- •22) Способы передачи параметров методу.
- •23) Статические компоненты классов.
- •24) Ссылка this.
- •25) Копирование объектов.
19) Перегрузка методов.
Перегрузка методов в C# означает, что в классе можно определить несколько методов с одним и тем же именем при условии, что эти методы получают разное число параметров. Не следует путать перегрузку методов с перекрытием методов. Перегрузка методов не имеет ничего общего с наследованием или виртуальными методами.
C# не разрешает использование значений по умолчанию для параметров.
Перегрузка методов позволяет программистам на С# многократно использовать одни и те же имена методов, меняя лишь передаваемые аргументы. Это очень полезно по крайней мере в двух сценариях. Первый: вам нужно иметь единое имя метода, поведение которого немного различается в зависимости от типа переданных аргументов. Допустим, у вас есть класс, отвечающий за протоколирование, позволяющий вашему приложению записывать на диск диагностическую информацию. Чтобы немного повысить гибкость класса, вы можете создать несколько форм метода Write,определяющих тип записываемой информации. Кроме собственно строки, подлежащей записи, метод также может принимать строку идентификатора ресурса. Без перегрузки методов вам пришлось бы реализовать отдельные методы наподобие WriteString и WriteFrom-Resourceld для каждой ситуации. Однако перегрузка методов позволяет реализовать оба эти метода под именемWriteEntry, они будут различаться лишь типом параметра:
using System; class Log { public Log(string fileName) { // Открыть файл fileName и перейти в его конец. } public void WriteEntry(string entry) { Console.WriteLine(entry); } public void WriteEntry(int resourceld) { Console.WriteLine ("Получение строки на основе идентификатора ресурса и запись в журнал"); } } class OverloadlngtApp { public static void Main() { Log log = new LogC'Mou файл"); log.WriteEntry("3anncb № 1"); log.WriteEntry(42); } }
Второй сценарий, в котором выгодно применять перегрузку метода, — использование конструкторов, которые в сущности представляют собой методы, вызываемые при создании экземпляра объекта. Допустим, вы хотите создать класс, который может быть построен несколькими способами. Например, он использует описатель (int) или имя (string) файла, чтобы открыть его. Поскольку правила С# диктуют, что у конструктора класса должно быть такое же имя, как и у самого класса, вы не можете просто создать разные методы для переменных каждого типа. Вместо этого нужно использовать перегрузку конструктора: using System;
class File { > class CommaDeliinitedFile { public CommaDelimitedFile(String fileName) { Console.WriteLine("Конструктор, использующий имя файла"); } public CommaDelimitedFile(File file) { Console.WriteLineC"Конструктор, использующий файловый объект"); } } class Overloading2App { public static void HainQ { File file = new File(); ConmaDelimitedFile flle2 = new ConnaDelinitedFile(file); ConnaDelinitedFile flleS = new ConmaDelinitedFile CMiM некоторого файла"); > }
О перегрузке метода важно помнить следующее: список аргументов каждого метода должен отличаться. Поэтому следующий код не будет компилироваться, так как единственное различие между двумя версиями OverloadingSApp.Foo — тип возвращаемого значения:
using System; class OverloadingSApp < void Foo(double input) { Console.WriteLine("Overloading3App.Foo(double)"); > // ОШИБКА: методы отличаются лишь типом возвращаемого значения. // Код компилироваться не будет, double Foo(double input) { Console.WriteLine("Overloading3App.Foo(double) (вторая версия)"); } public static void Main() { ' 4 ^.._ OverloadingSApp app = new Overloading3App(); double i = 5; app.Foo(l); > }