0

メソッド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);
}
4

5 に答える 5

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 に答える
0

Program.iAmPrivate内から呼び出していますProgram.Mainprivate両方が同じクラスのメソッドであるため、これはドキュメントに従って予想される動作です。

于 2013-01-23T11:36:01.127 に答える
0

Main メソッドの原因はクラスC#の static メソッドです。クラスProgram内から、実際に行っているメソッドにアクセスできます。ただし、別のクラスのメソッドにはアクセスできません。Programprivateprivate

于 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 クラスのプライベート関数を Program で実行できません。

于 2013-01-23T11:39:15.717 に答える