web-dev-qa-db-fra.com

Classes protégées dans .NET

Une classe peut-elle être protégée in.NET?
Pourquoi est/est-ce possible?

34
Aarsh Thakur

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 ).

70
ShuggyCoUk

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.

11
Nader Shirazie

Oui, nous ne pouvons tout simplement pas en faire des classes de niveau supérieur, elles doivent être des classes internes

4
Aarsh Thakur

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.

0
Vinay Chanumolu