如果方法iAmPrivate
是Private
,那么以下如何执行它?如果我尝试运行PrivateMethod的myPrivateMethod它是封装的,为什么不适用于iAmPrivate
?
class PrivateMethod {
private int myPrivateMethod() {
return 1;
}
}
static void Main(string[] args) {
Program myProgram = new Program();
myProgram.iAmPrivate("private");
myProgram.iAmPublic("public");
PrivateMethod pm = new PrivateMethod();
//Console.WriteLine("this won't run {0}", pm.myPrivateMethod); //not possible
Console.WriteLine("press [enter] to exit");
Console.ReadLine();
}
public void iAmPublic(string s) {
Console.WriteLine("I am {0}", s);
}
private void iAmPrivate(string s) {
Console.WriteLine("I am {0}", s);
}
答案 0 :(得分:0)
您正在Program.iAmPrivate
内拨打Program.Main
。这是符合private
文档的预期行为,因为两者都是同一类的方法。
答案 1 :(得分:0)
C#
中的原因主方法是Program
类的静态方法。在Program
类中,您可以访问其private
方法,实际执行的操作。但是您无法访问另一个类的private
方法。
答案 2 :(得分:0)
因为iAmPrivate
是在类Program
中定义的。所有私有成员都可以从定义它们的类型访问,但不能在该类型之外访问。
http://msdn.microsoft.com/en-us/library/st6sy9xe(v=vs.110).aspx
答案 3 :(得分:0)
根据定义,私有函数只能在定义它的类中访问。因此,即使在静态函数中,程序也可以访问其私有函数。
当您尝试从类外部访问私有函数时,Program不能执行PrivateMethod类中的私有函数。
答案 4 :(得分:0)
[感谢您的帮助......现在我明白了!]
将班级PrivateMethod
更改为以下内容有助于我了解正在发生的事情:
class PrivateMethod {
public int pretendMain() {
PrivateMethod x = new PrivateMethod();
return x.myPrivateMethod();
}
private int myPrivateMethod() {
return 1;
}
}
class Program {
static void Main(string[] args) {
Program myProgram = new Program();
myProgram.iAmPrivate("private");
myProgram.iAmPublic("public");
PrivateMethod pm = new PrivateMethod();
Console.WriteLine("this will now run {0}", pm.pretendMain()); //now possible !
//Console.WriteLine("this won't run {0}", pm.myPrivateMethod); //not possible
Console.WriteLine("press [enter] to exit");
Console.ReadLine();
}
public void iAmPublic(string s) {
Console.WriteLine("I am {0}", s);
}
private void iAmPrivate(string s) {
Console.WriteLine("I am {0}", s);
}
}
我失踪的事实是myProgram.iAmPrivate("private");
正在Main
内运行,所以当然可以访问它。