扩展方法只能看到扩展类的公共(或内部)成员

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

扩展方法只是一种语法糖,实际上并不是它们扩展的类的成员。这意味着它们不能破坏封装 - 它们只能访问 public(或者在同一个程序集中实现时,internal)字段,属性和方法。