Une classe peut-elle être protégée in.NET?
Pourquoi est/est-ce possible?
Oui, vous ne pouvez tout simplement pas en faire des classes de niveau supérieur, elles doivent être des classes internes
public class Outer
{
protected class Foo
{
}
}
C'est bon, cela signifie que les seules classes autorisées à voir Foo sont les sous-classes de Outer
class X
{
// 'Outer.Foo' is inaccessible due to its protection level
private void Flibble(Outer.Foo foo)
{
}
}
class X : Outer
{
// fine
private void Flibble(Outer.Foo foo)
{
}
}
Notez que vous ne pouvez pas déclarer une classe externe comme étant privée, protégée (ou interne protégée) en c # car le modificateur d'accès des classes de niveau externes définit leur visibilité par rapport à d'autres assemblys. Visiblement visible au sein de l'Assemblée uniquement (ou à des amis via InternalsVisibleTo) ou à l'extérieur de l'Assemblée.
Ainsi, alors que les identifiants public/interne sont utilisés ici pour des raisons de cohérence, l’état dans IL est simplement «public» ou «non public» (comme le montrent les drapeaux Reflection.Emit ).
protected
visibilité est utilisé pour indiquer 'visible pour les classes dérivées'. Cela a du sens pour les choses à l’intérieur d’une classe, mais n’a normalement aucune signification au niveau de la classe.
La seule exception à cette règle est une classe interne, où la visibilité protégée signifie que les classes dérivées auront accès à la classe interne.
Oui, nous ne pouvons tout simplement pas en faire des classes de niveau supérieur, elles doivent être des classes internes
Une classe protégée ne peut pas être définie dans un espace de noms. Elle ne peut être déclarée que comme une classe imbriquée. Il peut être instancié dans d'autres classes imbriquées et peut être hérité par d'autres classes imbriquées et peut hériter d'autres classes imbriquées.
Les membres imbriqués ainsi que les classes héritées de la classe parent (classe dérivée ou classe enfant) peuvent accéder à un membre protégé d'une classe parent.