2009-06-19 9 views

Répondre

67

Oui, vous ne pouvez pas les faire des classes de niveau supérieur, ils doivent être classes internes

public class Outer 
{ 
    protected class Foo 
    { 
    } 
} 

Cela est bien, cela signifie que les seules classes autorisés à voir Foo sont des sous-classes de l'espace extra

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 privée, protégée (ou protégée interne) dans C# car le modificateur d'accès pour les classes de niveau externe définit leur visibilité par rapport aux autres assemblys. Spécifiquement visible dans l'assemblage uniquement (ou à des amis via InternalsVisibleTo) ou en dehors de l'assemblage.

Ainsi, alors que les identifiants publics/internes sont utilisés ici pour la cohérence vraiment l'état dans IL est simplement « publique » ou « non publiques » (comme Reflection.Emit flags show)

+0

+1 clarté de l'exemple. –

11

visibilité protected est utilisé pour indiquer « visible aux classes dérivées '. Cela a du sens sur les choses à l'intérieur d'une classe, mais n'a normalement aucun sens au niveau de la classe. La seule exception à cela est une classe interne, où la visibilité protégée signifie que les classes dérivées auront accès à la classe interne.

3

Oui, nous ne pouvons pas en faire des classes supérieures de niveau, ils doivent être classes internes

Questions connexes