- •Кратко опишите объектно-ориентированный стиль программирования. В чем его преимущества в сравнении с процедурным стилем?
- •Что такое объект? Из чего он состоит?
- •Расскажите о том, как соотносятся классы и объекты?
- •Назовите базовый модуль повторного использования в Си#. Опишите его.
- •Каковы достоинства инкапсуляции в создании по. Какие два ключевых слова реализуют концепцию инкапсуляции?
- •В чем разница между классом и его объектами?
- •Что представляют собой ключевые слова и идентификаторы?
- •Как вызывается метод? Что при этом происходит?
- •Для чего используются пространства имен? в чем смысл использования ключевого слова «using»?
- •Что представляют собой фундаментальные части метода? Как указать, что метод не возвращает значения?
- •Что представляют собой фундаментальные части метода? Как задействовать аргументы в вызове метода?
- •Что представляют собой фундаментальные части метода? Что такое формальные параметры?
- •Что представляют собой фундаментальные части метода? Как связаны аргументы и формальные параметры?
- •Что является атомами программы на Си#?
- •Приведите примеры ключевых слов Си#?
- •Как переменная экземпляра может быть инициализирована при создании объекта?
- •Какие типы существуют Си#? Какие атрибуты отличают разные типы друг от друга?
- •В каких случаях в исходном тексте программы следует использовать константы? в чем их преимущества?
- •19.Что такое статическая переменная класса? Можно ли присвоить статической переменной некоторое значение, когда еще не создано никаких объектов класса?
- •20.Что такое статическая переменная класса? Возможен ли доступ к статической переменной из объекта класса, в котором она объявлена?
- •21.Являются ли методы со следующими заголовками правильно перегруженными?
- •22.Как перегруженные конструкторы делаю класс более удобным при использовании?
- •23.Назовите две основные задачи сборщика мусора?
- •24.Что такое деструктор? Почему он не используется для освобождения ресурсов, не относящихся к памяти?
19.Что такое статическая переменная класса? Можно ли присвоить статической переменной некоторое значение, когда еще не создано никаких объектов класса?
20.Что такое статическая переменная класса? Возможен ли доступ к статической переменной из объекта класса, в котором она объявлена?
Иногда требуется определить член класса, который должен использоваться
независимо от объекта этого класса. Обычно к члену класса доступ предоставляется через
объект этого класса. Однако можно создать член, который заведомо разрешено
использовать сам по себе, т.е. без ссылки на конкретный экземпляр. Чтобы создать такой
член, предварите его объявление ключевым словом static. Если член объявлен как
static, к нему можно получить доступ до создания объектов этого класса и без ссылки на
объект. С использованием ключевого слова static можно объявлять как методы, так и
переменные. В качестве первого примера static-члена приведем метод Main(), который
должен быть вызван операционной системой в начале работы программы.
При использовании static-члена вне класса необходимо указать имя класса и
следующий за ним оператор “точка”. Объект при этом не нужно создавать. К static-
члену получают доступ не через экземпляр класса, а с помощью имени класса. Например,
чтобы присвоить число 10 static-переменной с именем count, которая является членом
класса Timer, используйте следующую строку кода:
Timer.count = 10; Этот формат подобен тому, что используется для доступа к обычной переменной экземпляра через объект, но здесь вместо имени объекта необходимо указать имя класса. Аналогично можно вызвать и static-метод, т.е. с помощью оператора “точка” после имени класса.
Переменные, объявленные как static-члены, являются по сути глобальными
переменными. При объявлении объектов класса копии static-переменной не создаются,
причем все экземпляры класса совместно используют одну и ту же static-переменную.
Инициализация static-переменной происходит при загрузке класса. Если инициализатор
явно не указан, static-переменная, предназначенная для хранения числовых значений,
инициализируется нулем; объектные ссылки — null-значениями, а переменные типа bool
— значением false. Таким образом, static-переменная всегда имеет значение.
Различие между static- и обычным методом состоит в том, что static-метод
можно вызвать посредством имени класса, без необходимости создания объекта этого
класса.
На static-методы накладывается ряд ограничений.
1. static-метод не имеет ссылки this,
2. static-метод может напрямую вызывать только другие static-методы. Он не
может напрямую вызывать метод экземпляра своего класса. Дело в том, что
методы экземпляров работают с конкретными экземплярами класса, чего не
скажешь о static-методах.
3. static-метод должен получать прямой доступ только к static-данным. Он не
может напрямую использовать переменные экземпляров, поскольку не работает с
экземплярами класса.
Аналогичная проблема возникает при попытке вызвать нестатический метод из static-
метода того же класса. Вот пример:
Важно понимать, что static-метод может вызывать методы экземпляров и
получать доступ к переменным экземпляров своего класса, но должен делать это через
объект класса. Другими словами, он не может использовать обычные члены класса без
указания конкретного объекта.
