Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Ekzamenatsionnye_voprosy

.docx
Скачиваний:
87
Добавлен:
25.05.2015
Размер:
29.23 Кб
Скачать
  1. Что означают ключевые слова public и static в определении метода Main()?

У каждого приложения на С# должен быть метод Main, определенный в одном из его классов. Кроме того, этот метод должен быть определен как public и static (ниже я объясню, что значит static). Для компилятора С# ле важно, в каком из классов определен метод Main, а класс, выбранный для этого, не влияет на порядок компиляции. Здесь есть отличие от C++, так как там зависимости должны тщательно отслеживаться при сборке приложения. Компилятор С# достаточно "умен", чтобы самостоятельно просмотреть ваши файлы исходного кода и отыскать метод Main. Между тем этот очень важный метод является точкой входа во все приложения на С#.

  1. Модификаторы уровня доступа при объявлении метода?

Все члены класса - поля, методы, свойства - все они имеют модификаторы доступа. Модификаторы доступа позволяют задать допустимую область видимости для членов класса. То есть контекст, в котором можно употреблять данную переменную или метод. В предыдущей теме мы уже с ними сталкивались, когда объявляли поля класса Book публичными (то есть с модификатором public).

В C# применяются следующие модификаторы доступа:

  • public: публичный, общедоступный класс или член класса. Такой член класса доступен из любого места в коде, а также из других программ и сборок.

  • private: закрытый класс или член класса. Представляет полную противоположность модификатору public. Такой закрытый класс или член класса доступен только из кода в том же классе или контексте.

  • protected: такой член класса доступен из любого места в текущем классе или в производных классах.

  • internal: класс и члены класса с подобным модификатором доступны из любого места кода в той же сборке, однако он недоступен для других программ и сборок (как в случае с модификатором public).

  • protected internal: совмещает функционал двух модификаторов. Классы и члены класса с таким модификатором доступны из текущей сборки и из производных классов.

Объявление полей класса без модификатора доступа равнозначно их объявлению с модификатором private. Классы, объявленные без модификатора, по умолчанию имеют доступ internal.

  1. Какой подход используется в библиотеках базовых классов .NET для организации классов?

  1. Из чего может состоять открытый интерфейс класса по умолчанию?

Открытый интерфейс по умолчанию для класса – это набор

открытых членов данного класса.

это набор тех переменных, свойств и методов-членов,

к которым можно обратиться в формате имя_объекта.член_класса

(с точки зрения обращения к членам класса).

это набор тех членов класса, которые объявлены

с использованием ключевого слова public (с точки зрения

определения класса).

В C# открытый интерфейс по умолчанию для класса

может состоять из следующих членов этого класса:

  • Методов

  • Свойств

  • Полей

  1. Каким образом реализуются основные принципы ООП средствами синтаксиса C#?

    • Инкапсуляция

    • Наследование

    • полиморфизм

  1. Каково главное преимущество свойств?

Еще одной разновидностью члена класса является свойство. Как правило, свойство сочетает в себе поле с методами доступа к нему. Как было показано в приведенных ранее примерах программ, поле зачастую создается, чтобы стать доступным для пользователей объекта, но при этом желательно сохранить управление над операциями, разрешенными для этого поля, например, ограничить диапазон значений, присваиваемых данному полю. Этой цели можно, конечно, добиться и с помощью закрытой переменной, а также методов доступа к ее значению, но свойство предоставляет более совершенный и рациональный путь для достижения той же самой цели. Свойства очень похожи на индексаторы. В частности, свойство состоит из имени и аксессоров getи set. Аксессоры служат для получения и установки значения переменной. Главное преимущество свойства заключается в том, что его имя может быть использовано в выражениях и операторах присваивания аналогично имени обычной переменной, но в действительности при обращении к свойству по имени автоматически вызываются его аксессоры get и set. Аналогичным образом используются аксессоры get и set индексатора.

  1. Каковы две возможности замещения методов в производном классе?

Перейдем к работе с методами в производных классах. Понятно, что методы объявленные с модификатором public или protected можно использовать в производном классе без проблем. Представляет интерес возможность замещения методов в производном классе. Тут есть две возможности:

•    полное замещение метода базового класса без поддержки полиморфизма;

•    перегрузка метода базового класса с поддержкой полиморфизма.

  1. Сокрытие методов. Особенности применения?

В большинстве случаев вам нужно переопределять методы, а не скрывать их. Скрывая методы, вы рискуете вызывать "неверный" метод для экземпляра данного класса. Однако, как показано в следующем примере,синтаксис С# спроектирован так, чтобы гарантировать, что разработчик будет предупрежден об этой потенциальной проблеме при компиляции, тем самым обеспечивая возможность более безопасного сокрытия методов, если это действительно нужно. Это также дает преимущества разработчикам библиотек классов при работе с разными версиями. Предположим, имеется класс HisBaseClass:

class HisBaseClass {

// разнообразные члены

}

В какой-то момент в будущем вы напишете класс-наследник, добавляющий некоторую функциональность к HisBaseClass. В частности, добавите метод MyGroovyMethod (), которого нет в базовом классе:

class MyDerivedCJass: HisBaseClass

{

public int MyCruovyMethod() {

// некая превосходная реализация

return 0;

}

}

  1. Как звучит первый закон приведения типов?

Первый закон приведения типов звучит так: если один класс является производным от другого, всегда безопасно ссылаться на объект производного класса через объект базового класса. В результате мы можем использовать в C# весьма мощные программные конструкции. Например, если у нас определен метод для увольнения сотрудника: 

public class TheMachine I 

public static void FlreTlrisPerson(Employee e) 

// Удаляем сотрудника из базы данных 

// Отбираем у него ключ и точилку для карандашей  }

  1. Какова основная идея интерфейсов?

  1. Что такое структура и каковы важные отличия структуры от классов?

  2. Класс System.Enum и его статические методы?

Базовый класс System.Enum является абстрактным, поэтому не может напрямую иметь экземпляры (объекты), а может использоваться только как базовый в цепочке наследования. Тем не менее он определяет ряд статических методов, позволяющих обрабатывать созданные перечисления. Вот некоторые из этих методов.

  1. Назначение и как используются регулярные выражения?

Безуcловно, задачу поиска и замены подстроки в строке можно решить на C# с использованием различных методов System.String иSystem.Text.StringBuilder. Однако в некоторых случаях это потребует написания большого объема кода C#. Если вы используете регулярные выражения, то весь этот код сокращается буквально до нескольких строк. По сути, вы создаете экземпляр объекта RegEx, передаете ему строку для обработки, а также само регулярное выражение (строку, включающую инструкции на языке регулярных выражений) — и все готово.

В следующей таблице показана часть информации о перечислении RegexOptions, экземпляр которого можно передать конструктору класса RegEx

  1. Каким образом улучшается объектно – ориентированная структура класса при добавлении в него метода(ов)ссе?нтаксиса С№вшись командой Купыкмериализации экземпляра класса??

  2. Параметры с модификаторами ref и out?

Вызывать две функции-члена, чтобы получить два значения, не всегда удобно, поэтому было бы хорошо иметь возможность получить оба значения с помощью только одного вызова функции. Однако функция может возвращать только одно значение. Решение этой проблемы заключается в том, чтобы использовать ссылочный (или ref) параметр. При этом значения параметров, передаваемых функции, могут быть изменены:

// error using System; class Point { public Point(int x, int y) { this.x = x; this.y = y; } // get both values in one function call public void GetPoint(ref int x, ref int y) { x = this.x; y = this.y; } int x; int y; }

class Test { public static void Main() { Point myPoint = new Point(10, 15); int x; int y; // illegal myPoint.GetPoint(ref x, ref y); Console.WriteLine("myPoint({0}, {1})", x, y); } }

  1. Типы данных var и dynamic?

При объявлении переменной мы можем воспользоваться ключевым словом var, в этом случае сам компилятор определяет тип:

var x = 2;

Также присутствует особый тип dynamic. Суть его в том, что компилятор будет пропускать проверки типов при компиляции и осуществлять их только при выполнении операции.

struct Point { int x; } Point p = new Point(); dynamic pNew = p; pNew.x = 3; pNew.y = "Red";

  1. Что дает расширение методов для существующих типов данных?

  1. Четыре варианта синтаксиса метода Main()?

  2. Что задает описание делегата?

  3. Что необходимо учитывать при вызове последовательности методов с помощью делегата?

  4. Что такое – лямбда выражение?

  5. Каким образом обеспечивается функциональная параметризация?

  6. Что собой представляет обратный вызов и где используется механизм обратного вызова?

  7. Что является альтернативой использования делегатов в качестве параметров?

  8. Что такое событие и каков механизм событий?

  9. Какая взаимосвязь существует между делегатами и событиями?

  10. Возможности реализации обработки событий с использованием интерфейсов?

  11. В чем состоит смысл хэш – функции и примеры хэш – функции (функции расстановки)?

  12. Основные методы и свойства класса ArrayList?

  13. Что представляют собой классы – прототипы?

  14. Параметризованные коллекции библиотеки .NET 2.0 и их использование?

  15. Что такое ограничения и что можно в них задать?

  16. Что позволяют параметризированные интерфейсы и делегаты?

  17. Каким образом в технологии разработки программ используется возможность разбиения описания типа на части?

  18. Что такое поток (stream) с точки зрения ввода – вывода?

  19. Каким образом происходит работа с двоичными данными?

  20. Сериализация в двоичном формате и в формате SOAP?

  21. Сериализация в пользовательском формате и интерфейс ISerializable?

  22. Сериализация объектов с использованием DataContract,DataMember атрибутов.

  23. Каковы проблемы с классическими двоичными файлами COM?

  24. Логическое и физическое представление сборки?

  25. Частные сборки и сборки для общего доступа?

  26. Работа с потоками в традиционных приложениях Win32?

  27. Что такое домен приложения,

  28. Пространство имен System.Threading и работа с классом Thread?

  29. Параллельная работа потоков?

  30. Как передаются данные потокам. Одновременный доступ к данным из разных потоков?

  31. Синхронизация потоков в других процессах и AppDomain?

  32. Что такое атрибуты, формат атрибута и примеры?

  33. Атрибуты используемые для управления процессами передачи данных от типов .NET типам COM (и наоборот)?

  34. Что обеспечивают службы активизации платформ Pinvoke?

  35. Каково предназначение модулей RCW и CCW?

  36. Что такое LINQ?

  37. Что такое TPL?

  38. Каково назначение атрибута MarshalAs?

  39. Типы данных, обеспечивающие взаимодействие с локальными и удаленными хранилищами данных?

  40. Что собой представляет главный тип ADO.NET – DataSet?

  41. Как можно создавать объекты DataSet, заполненные данными таких СУБД, как MS SQL Server, Oracle и MS Access?

  42. В чем заключается концепция управляемых поставщиков .NET и типы OleDbAdapter и SQLDataAdapter?

  43. Что такое Web – приложение? Каковы основы архитектуры Web – приложений?

  44. Что такое IIS?

  45. Что такое WCF?

  46. Что такое виртуальные каталоги в IIS?

  47. Опишите модель сборщика мусора в среде .net framework.

  48. Опишите понятие сборки в .net framework.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]