Quest'oggi stavo giocando con l'accessibility accessor 'protected internal' e non mi quadrava una cosa. Veniamo al pezzo di codice incriminato:

public class B

{

    protected internal A a;

}

 

internal class A

{

}

Il compilatore generera' un bel errore del tipo "Inconsistent accessibility: field type 'Demo.A' is less accessible than field 'Demo.B.a'". Il compilatore ha sempre ragione ed infatti 'protected internal' vuol dire 'protected' or 'internal'. Essendo la classe A solo internal, l'aggiunta di 'protected' non va bene in quanto ha una visibilita' piu' estesa.

Mi son chiesto ma come accidenti posso avere protected and internal dato che sia l'IL (FamAndAdssem) che C++/CLI (protected private) che System.Reflection.Emit lo permettono? La risposta e', niente da fare!

Peccato!