logo search
CSharp_Prog_Guide

Доступность члена класса и структуры

Члены класса (включая вложенные классы и структуры) можно объявить с любым из пяти типов доступа. Члены структуры нельзя объявлять защищенными, так как структуры не поддерживают наследование.

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

// public class:

public class Tricycle

{

// protected method:

protected void Pedal() { }

// private field:

private int m_wheels = 3;

// protected internal property:

protected internal int Wheels

{

get { return m_wheels; }

}

}

Note:

The protected internal accessibility means protected OR internal, not protected AND internal. In other words, a protected internal member is accessible from any class in the same assembly, including derived classes. To limit accessibility to only derived classes in the same assembly, declare the class itself internal, and declare its members as protected.

Other Types

Interfaces, just like classes, can be declared as public or internal types. Unlike classes, interfaces default to internal access. Interface members are always public, and no access modifiers can be applied.

Namespaces and enumeration members are always public, and no access modifiers can be applied.

By default, delegates have internal access.

Any types declared in a namespace or at the top level of a compilation unit (for example, not within a namespace, class, or struct) are internal by default, but can be made public.

Если член класса или структуры является свойством, полем, методом, событием или делегатом, и такой член является типом или имеет тип в качестве параметра или возвращаемого значения, член не может обладать большей доступностью, чем тип. Например, метод M, возвращающий класс C не может быть открытым, если C также не является открытым. Подобным образом, свойство типа A не может быть защищенным, если A объявлен закрытым.

Определенные пользователям операторы также должны быть объявлены как открытые.

Деструкторы не могут иметь модификаторов доступности.

Чтобы задать уровень доступа для члена класса или структуры, добавьте соответствующее ключевое слово к объявлению члена, как в приведенном примере

------------

Примечание.

Доступность protected internal означает "защищенный OR внутренний", а не "защищенный AND внутренний". Другими словами, член protected internal доступен из любого класса в одной сборке, включая производные классы. Чтобы ограничить доступность только производными классами в одной и той же сборке, сам класс необходимо объявить внутренним, а его члены – защищенными.