C# Language I metodi di estensione possono vedere solo i membri pubblici (o interni) della classe estesa

Esempio

public class SomeClass
{
    public void DoStuff()
    {
        
    }

    protected void DoMagic()
    {
        
    }
}

public static class SomeClassExtensions
{
    public static void DoStuffWrapper(this SomeClass someInstance)
    {
        someInstance.DoStuff(); // ok
    }

    public static void DoMagicWrapper(this SomeClass someInstance)
    {
        someInstance.DoMagic(); // compilation error
    }
}

I metodi di estensione sono solo uno zucchero sintattico e non sono in realtà membri della classe che estendono. Ciò significa che non possono interrompere l'incapsulamento: hanno solo accesso al public (o quando è implementato nei campi, proprietà e metodi dello stesso assembly, internal ).