封装自引用控制台应用程序方法

时间:2013-01-23 11:34:22

标签: c#

如果方法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);
}

5 个答案:

答案 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内运行,所以当然可以访问它。

相关问题