0

如果方法iAmPrivatePrivate那么以下如何执行它?如果我尝试运行 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);
}
4

5 回答 5

0

你是Program.iAmPrivate从内部呼叫Program.Main。根据文档,这是预期的行为,private因为两者都是同一类的方法。

于 2013-01-23T11:36:01.127 回答
0

C#Main方法中的原因是Program类的静态方法。在Program类中,您可以访问它的private方法,即您实际执行的操作。但是你不能访问另一个private的方法。

于 2013-01-23T11:36:02.430 回答
0

因为iAmPrivate是在类中定义的Program。所有私有成员都可以从定义它们的类型访问,但不能在该类型之外访问。

http://msdn.microsoft.com/en-us/library/st6sy9xe(v=vs.110).aspx

于 2013-01-23T11:38:01.313 回答
0

根据定义,私有函数只能在定义它的类内部访问。因此,程序可以访问其私有函数,即使在静态函数中也是如此。

当您尝试从类外部访问私有函数时,程序无法执行 PrivateMethod 类中的私有函数。

于 2013-01-23T11:39:15.717 回答
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所以它当然是可以访问的。

于 2013-01-29T12:45:11.253 回答