C# Language Los métodos de extensión solo pueden ver miembros públicos (o internos) de la clase extendida


Ejemplo

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

Los métodos de extensión son solo un azúcar sintáctico, y en realidad no son miembros de la clase que extienden. Esto significa que no pueden romper la encapsulación: solo tienen acceso a public campos, propiedades y métodos public (o cuando se implementan en el mismo ensamblaje, internal ).