2016-05-25 15 views
6

Ten kod nie kompiluje:Metoda chroniona wewnętrznego nie pozwalając klas wewnętrznych jako parametr

internal class Foo {} 

public abstract class SomeBaseClass 
{ 
    protected internal void ProcessFoo(Foo value) 
    { 
     // doing something... 
    } 
} 

kompilacji nie stwierdzając:

Niekonsekwetne dostępność: typ parametru Foo jest mniej dostępny niż metody SomeBaseClass.ProcessFoo

+7

Kompilator jest poprawna: 'internal' jest mniej dostępny niż' chronionego internal', co oznacza 'protected' lub' internal'. Klasa w innym zestawie może pochodzić z 'SomeBaseClass' i wywoływać' ProcessFoo'. Zmień dostępność opcji 'ProcessFoo' na' internal' lub zmień dostępność 'Foo' na' public'. –

+3

To jest wystarczająco dobre, aby być odpowiedzią, @MichaelLiu – Rob

+0

Och, rozumiem, myślałem, że chroniony wewnętrzny jest addytywny (chroniony, wewnętrzny), a nie alternatywny (chroniony/wewnętrzny). To jest niefortunne. –

Odpowiedz

3

Najwyraźniej protected internal oznacza protected lub internal, a nie protected i internal, tak jak sądziłem.

Credit Michael Liu

Powiązane problemy