擴充套件方法只能看到擴充套件類的公共(或內部)成員

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)欄位,屬性和方法。