Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
госы_шпоры.doc
Скачиваний:
52
Добавлен:
17.08.2019
Размер:
436.22 Кб
Скачать

19. Чем интерфейс отличается от класса в языке c#?

 

Интерфейс - это частный случай класса. Интерфейс представляет собой полностью абстрактный класс, все методы которого абстрактны. От абстрактного класса интерфейс отличается некоторыми деталями в синтаксисе и поведении. Синтаксическое отличие состоит в том, что методы интерфейса объявляются без указания модификатора доступа. Отличие в поведении заключается в более жестких требованиях к потомкам. Класс, наследующий интерфейс, обязан полностью реализовать все методы интерфейса. В этом - отличие от класса, наследующего абстрактный класс, где потомок может реализовать лишь некоторые методы родительского абстрактного класса, оставаясь абстрактным классом.

 

Интерфейс объявляется с ключевым словом interface и является почти такой же структурой языка, как и класс, за несколькими исключениями.

 

В отличие от класса интерфейс не может содержать полей. Интерфейс может содержать все остальные конструкции языка, которые могут содержаться в классе. Такие, как свойства, события и методы. Стоит отметить, что интерфейс не может содержать определений методов, свойств или событий. В терминах C++ интерфейс представляет собой абстрактный класс. Все методы интерфейса должны быть реализованы в классах, наследующих данный интерфейс.

 

20. Что означает ключевое слово try в языке c#?

 

Инструкция try-catch состоит из блока try, за которым следует одно или несколько предложений catch, в которых определяются обработчики для различных исключений. При возникновении исключения среда CLR ищет оператор catch, который обрабатывает это исключение. Если выполняющийся в данный момент метод не содержит такого блока catch, то среда CLR рассматривает метод, который вызвал текущий метод, и т. д. по стеку вызовов. Если блок catch не найден, то среда CLR отображает пользователю сообщение о необработанном исключении и останавливает выполнение программы.

 

Блок try содержит защищаемый код, в котором могут происходить исключения. Этот блок выполняется до момента возникновения исключения или до своего успешного завершения.

 

21. Возможен ли в языке c# доступ в методе производного класса к унаследованным из базового класса полям?

 

Из производного класса можно получить доступ к открытым, защищенным, внутренним и защищенным внутренним членам базового класса. Хотя производный класс и наследует закрытые члены базового класса, он не может получить доступ к этим членам. Однако все эти закрытые члены все же присутствуют в производном классе и могут выполнять ту же работу, что и в самом базовом классе. Например, предположим, что защищенный метод базового класса имеет доступ к закрытому полю. Это поле должно присутствовать в производном классе для надлежащей работы унаследованного метода базового класса.

 

22.  Какой тип объекта ошибки может передаваться оператору throw в языке C#?

 

Исключение.

//Любые типы исключения, наследуемые от класса System.Exception

 

23.  Что произойдёт, если не будет найден обработчик для сгенерированного программой исключения?

 

Произойдет подъем по стеку вызовов, и поиск обработчиков в методе, вызвавшем метод, который выкинул исключение. Если и в нём нет, тогда поиск будет подниматься всё выше и выше, пока не дойдёт до процедуры Main(). Если и там нет, то активируется стандартный обработчик, прерывающий работу программы с соответствующим сообщением.

 

24.  Можно ли использовать указатели в программах на языке C#?

 

Да, на участке с небезопасным кодом.

 

25.  В каком случае через ссылку на объект класса С# доступен для вызова метод ToString?

 

В любом, так как ссылка на объект класса является переменной, которая привязывается к объекту.

То есть

Class s = new Class (); String v =  s.ToString();

Здесь в переменную s записывается ссылка на объект класса Class. А в строку v пишется результат вызова метода ToString для данной переменной (ссылки на объект).

 

 

 

26.  Если формальный аргумент метода объявлен как экземпляр класса X, то какого типа в языке C# может быть фактический аргумент при вызове метода?

 

Если формальный аргумент объявлен с типом T, то выражение, задающее фактический аргумент, должно быть согласовано по типу с типом T: допускает преобразование к типу T, совпадает c типом T или является его потомком (соответствие по типу).

 

То есть, в данном случае фактический аргумент тоже должен быть типа X.

 

27.  Можно ли передать доступ к некоторой структуре в вызываемый метод по ссылке?

 

Да. (Вроде нужно использовать ключевое слово thisref)

//знакомый кодер, во всяком случае, сказал, что это так.

 

28.  Какие данные не относятся к пользовательским типам языка C# (то есть, к типам, определяемым программистами)?

 

Встроенные (базовые типы), не относящиеся к пользовательским:

 

byte    

sbyte   

int      

uint    

short  

ushort

long   

ulong 

float   

double

char   

bool    

object 

string 

decimal         

 

29.  Если присваивание переменных x = y допустимо, то допустимо ли обратное присваивание в языке C#?

 

Зависит от типов операндов.

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