扩展方法只能看到扩展类的公共(或内部)成员
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
)字段,属性和方法。