Можно ли объявить скрытый (private) статический член в некотором классе?
Да можно. В этом случае этот статический член класса будет доступным только в границах этого класса, то есть из методов этого класса. Доступ из методов других классов будет невозможен.
Можно ли объявлять статический член класса с модификатором доступа protected?
Да можно. В этом случае, доступ к статического члену класса будут иметь методы класса, которые унаследованы от данного класса.
Например. Задан класс A, содержащий один статический член a, который объявлен как protected. Также задан класс B, который наследует (расширяет) класс A. Из метода SomeMethod() класса B осуществляется доступ к protected-переменной класса A.
// нестатический класс, который содержит нестатический и статический методы
class A
{
protected static int a;
}
// класс B наследует (расширяет) класс A
class B : A
{
void SomeMethod()
{
a = 10; // доступ к protected-переменной класса A
}
}
10. Может ли нестатический класс содержать статические переменные и статические методы?
Да может. Примеры использования статических методов в нестатическом классе приведены в пунктах 5 и 7.
Можно ли объединять статические и нестатические методы в одном классе?
Да, можно. Но только в нестатическом классе. Если класс объявлен как статический, то все методы и переменные класса должны быть также статическими (см. п. 4 — Пример 2).
Например. Пример демонстрирует объединение статического и нестатического методов класса для доступа к скрытой статической переменной t в классе. Объявляется нестатический класс CMyClass, содержащий статическую переменную, статический и нестатический методы доступа к ней.
// нестатический класс
class CMyClass
{
// статическая переменная, объявленная как private
private static int t;
// статический метод, который изменяет значение статической переменной t
public static void Set(int _t)
{
t = _t;
}
// нестатический метод, который читает значение статической переменной t
public int Get() { return t; }
}
В нижеследующем коде продемонстрирован доступ к скрытой статической переменной t класса CMyClass
// демонстрация объединения статических и нестатических членов класса
int x;
// 1. Доступ к скрытой (private) статической переменной через статический метод Set
CMyClass.Set(777); // статическая переменная t = 777
// 2. Прочитать значение скрытой (private) статической переменной t
// 2.1. Создать объект класса
CMyClass mc = new CMyClass();
// 2.2. Вызвать нестатический метод Get() через экземпляр класса
x = mc.Get(); // x = 777 - текущее значение статической переменной
Данный пример хорошо демонстрирует, как можно организовать работу с общими, скрытыми данными класса.
Do'stlaringiz bilan baham: |