2009-06-19 17 views

Odpowiedz

67

Tak, po prostu nie może zrobić im zajęcia najwyższym poziomie, muszą być wewnętrzne klasy

public class Outer 
{ 
    protected class Foo 
    { 
    } 
} 

To jest w porządku, to znaczy, że jedynymi klasami pozwolono zobaczyć Foo są sub klasy zewnętrznej

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) 
    { 
    } 
} 

Należy zauważyć, że nie można zadeklarować żadnej klasy zewnętrznej jako prywatnej, chronionej (lub chronionej wewnętrznej) w języku C#, ponieważ modyfikator dostępu dla klas poziomu zewnętrznego określa ich widoczność w stosunku do innych złożeń. Widoczne tylko wewnątrz zespołu (lub znajomym za pośrednictwem InternalsVisibleTo) lub poza zespołem.

Tak więc podczas gdy publiczne/identyfikatory wewnętrzne stosowane są tutaj konsystencji naprawdę stan IL jest po prostu „publiczny” lub „niepubliczne” (jak Reflection.Emit flags show) widoczność

+0

+1 jasność przykładu. –

11

protected służy do wskazania „widoczny dla klas pochodnych ". Ma to sens w przypadku przedmiotów wewnątrz klasy, ale zwykle nie ma znaczenia na poziomie klasy.

Jedynym wyjątkiem jest klasa wewnętrzna, w której widoczność chroniona oznacza, że ​​klasy pochodne będą miały dostęp do klasy wewnętrznej.

3

Tak, po prostu nie możemy ich uczynić klasami najwyższego poziomu, muszą to być klasy wewnętrzne

Powiązane problemy