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

3. Какой метод выберет компилятор?

public class Test

{

public Test(object obj) { Console.WriteLine("object"); }

public Test(int[] obj) { Console.WriteLine("int[]"); }

}

public static void Main() { Test t = new Test(null); }

Ответ: Int[]. Компилятор при определении вызова не использует текущее значение, а выбирает наиболее «специфический» конструктор. Нужно явно указать тип, если есть желание вызвать конструктор object: new Test((object)null);

Экзаменационный билет №7

1. Информационные члены класса и члены-методы.

class Имя_класса { определение_членов_класса };

Члены класса можно разделить на информационные члены и функции-члены (методы) класса. Информационные члены описывают внутреннюю структуру информации, хранящейся в объекте, который создается на основе класса. Методы класса описывают алгоритмы обработки этой информации. Данные, хранящиеся в информационных членах, описывают состояние объекта, созданного на основе класса. Состояние объекта изменяется на основе изменения хранящихся данных с помощью методов класса. Алгоритмы, заложенные в реализации методов класса, определяют поведение объекта, то есть реагирование объекта на поступающие внешние воздействия в виде входных данных.

Свойства и поля

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

Различные фрагменты содержащихся в объекте данных все вместе образуют состоя­ние этого объекта. Например, предположим, что имеется класс объектов, представ­ляющий чашку кофе и потому имеющий имя CupOfCoffee. При создании экземпляра этого класса (т.е. создании объекта этого класса), для него нужно обязательно обеспе­чить состояние, чтобы он нес какой-то смысл. Для этого можно использовать свойст­ва и поля с целью предоставления использующему данный объект коду возможности определять сорт используемого кофе, то, содержится ли в кофе молоко и/или сахар, является ли кофе растворимым и т.д. Тогда каждый конкретный объект CupOfCofee будет иметь определенное состояние, например: "Чашка колумбийского кофе с моло­ком и двумя ложками сахара".

Как поля, так и свойства добавляются путем ввода, поэтому информация может в них сохраняться в виде значений string, int и т.д. Свойства, однако, отличают­ся от полей тем, что они не предоставляют непосредственного доступа к данным. Объекты могут ограждать пользователей от мельчайших деталей своих данных, кото­рые не нуждаются в представлении "один к одному" существующих свойств. Скажем, в случае поля для сохранения информации о количестве ложек сахара в экземпляре CupOfCof fee пользователи смогут помещать в него любые желаемые значения и под­вергаться лишь тем ограничениям, которые имеются у использованного для хране­ния этой информации типа. То есть, например, в случае использования для хранения этих данных типа int пользователи смогут помещать в это поле любое значение в диапазоне от -2 147 483 648 до 2 147 483 647, как было показано в главе 3. Очевидно, что не все значения в этом диапазоне будут иметь смысл, особенно отрицательные, да и некоторые большие положительные тоже могут требовать чашки необычайно боль­ших размеров. В случае же применения свойства для сохранения этой информации данное значение можно легко ограничить, скажем, только числами от 0 до 2.

В общем, для доступа к состоянию лучше предоставлять свойства, а не поля, по­скольку они позволяют управлять большим количеством аспектов. Этот выбор никак не влияет на код, применяющий экземпляры объектов, потому что синтаксис для ис­пользования свойств и полей выглядит одинаково.

Методы.

Метод – это термин, которым принято называть представляемую объектом функ­цию. Методы могут вызываться так же, как и любые другие функции, и тем же самым образом использовать возвращаемые значения и параметры.

Методы применяются для обеспечения доступа к функциональным возможностям объекта. Подобно полям и свойствам, они могут быть общедоступными или приватны­ми и тем самым ограничивать доступ для внешнего кода необходимым образом. Они нередко подразумевают использование состояния объекта в своих операциях и имеют доступ к приватным членам, вроде приватных полей, если в том есть необходимость. Например, класс CupOfCoffee может иметь метод AddSugar(), предоставляющий бо­лее удобочитаемый синтаксис для увеличения количества сахара, чем установка соот­ветствующего свойства Sugar.

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