Contents
在C#中我们能调用一个类的私有方法吗?当然我们要排除掉用反射的方式:)直觉应该是不能。那我们来看一段代码吧。下面的代码修改自Eric Lippert的Interface implementation in C# and VB。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public interface MyInterface { void Foo(); } public class MyClass : MyInterface { void MyInterface.Foo() { Console.WriteLine("MyClass Foo"); } } class Program { static void Main(string[] args) { MyClass myClass = new MyClass(); MyInterface myClass2 = new MyClass(); myClass2.Foo(); } }
|
只要我们用接口,就能访问MyClass
的似有函数Foo
了。这个稍微有点反直观,那么我们来看一个温和点的例子。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class MyClass2 { public static Action GetPrivateFoo() { return new Action(Foo); } private static void Foo() { Console.WriteLine("MyClass2 Foo!"); } } class Program { static void Main(string[] args) { var foo = MyClass2.GetPrivateFoo(); foo(); } }
|
这个有点好理解了,我们用一个公有方法把一个私有方法返回了出去,这样外面就能调用私有方法了。上面那个接口的例子其实和这个很类似。
那么private
到底是什么意思呢?
private
表示这个方法不能被这个类之外通过查名字的方式看到,也就是说,private
只是作为名字查找(name resolution)的输入,而不是一个成员能否被调用的限制。