public int gamma; // открытый доступ
// Методы, которым доступны члены alpha и beta данного класса.
// Член класса может иметь доступ к закрытому члену этого же класса.
public void SetAlpha(int а) { alpha = а;
public int GetAlphaO { return alpha;
}
public void-SetBeta(int a) { beta = a;
}
public int GetBeta { return beta;
}
}
class AccessDemo { static void Main {
MyClass ob = new MyClassO;
// Доступ к членам alpha и beta данного класса // разрешен только посредством его методов, ob.SetAlpha(-99) ; ob.SetBeta(19) ;
Console.WriteLine("ob.alpha равно " + ob.GetAlpha);
Console.WriteLine("ob.beta равно " + ob.GetBeta);
// Следующие виды доступа к членам alpha и beta // данного класса не разрешаются.
// ob.alpha =10; // Ошибка! alpha - закрытый член!
// ob.beta =9; // Ошибка! beta - закрытый член!
// Член gamma данного класса доступен непосредственно,
// поскольку он является открытым, ob.gamma = 99;
}
}
Как видите, в классеMyClassчленalphaуказан явно какprivate,членbetaстановитсяprivateпо умолчанию, а членgammaуказан какpublic.Таким образом, членыalphaиbetaнедоступны непосредственно из кода за пределами данного класса, поскольку они являются закрытыми. В частности, ими нельзя пользоваться непосредственно в классеAccessDemo.Они доступны только с помощью таких открытых(public)методов, какSetAlpha () иGetAlpha . Так, если удалить символы комментария в начале следующей строки кода:
// ob.alpha =10; // Ошибка! alpha - закрытый член!
то приведенная выше программа не будет скомпилирована из-за нарушения правил доступа. Но несмотря на то, что членalphaнедоступен непосредственно за пределами классаMyClass,свободный доступ к нему организуется с помощью методов, определенных в классеMyClass,как наглядно показывают методыSetAlpha иGetAlpha . Это же относится и к членуbeta.
Из всего сказанного выше можно сделать следующий важный вывод: закрытый член может свободно использоваться другими членами этого же класса, но недоступен для кода за пределами своего класса.
Организация закрытого и открытого доступа
Правильная организация закрытого и открытого доступа — залог успеха в объектно-ориентированном программировании. И хотя для этого не существует твердо установленных правил, ниже перечислен ряд общих принципов, которые могут служить в качестве руководства к действию.
• Члены, используемые только в классе, должны быть закрытыми.