25

FooC# を使用しているときに、オブジェクトのプライベート関数をFooの静的関数から、さらには他のオブジェクトからも呼び出すことができることに最近気付きましたFoo。アクセス修飾子について学んだすべての後、これは私には非常に奇妙に思えます。

私の知る限り、ある種の内部プロセスの一部である何かを行う場合、関数をプライベートにします。他のオブジェクトはオブジェクトのフローを制御すべきではない/制御できないため、これらの関数をいつ使用するかを知っているのはオブジェクト自体だけです。同じクラスの他のオブジェクトをこの非常に単純なルールから除外する必要がある理由はありますか?

リクエストに応じて、例:

public class AClass {
    private void doSomething() { /* Do something here */ }
    public void aFunction() {
        AClass f = new AClass();
        f.doSomething(); // I would have expected this line to cause an access error.
    }
}
4

6 に答える 6

1

Privateメンバーは、そのクラスのスコープ内の他のすべてのメンバーからのみアクセスできます。これが複数のインスタンスで行われるか、1 つのインスタンスで行われるかは問題ではありません。

からのみ呼び出されるようにメンバーを制限しようとしてthis.いるため、(インスタンスの観点から見て) 外部からの呼び出しは許可されませんが、のスコープに入ると、呼び出しは許可されます。あなたのインスタンス。これは C# ではまったく不可能です。

でもいい機能だろう... :)

于 2013-05-03T08:49:58.070 に答える
0

プライベート メソッドにアクセスできる理由は、内部にいるためです。AClass

たとえば、BClassを作成してAClass内部に を作成すると、プライベート メソッドにアクセスできなくなります。

public class AClass
{
    private void doSomething() { /* Do something here */ }
    public void aFunction()
    {
        AClass f = new AClass();
        f.doSomething(); // we are inside AClass so we can access
    }
}

public class BClass
{
    private void doSomething() { /* Do something here */ }
    public void aFunction()
    {
        AClass f = new AClass();
        f.doSomething(); // Will not compile because we are outside AClass
    }
}

基本的にその...

Public - クラスが見えればメソッドも見える

プライベート- クラスに参加している場合はメソッドを表示できますが、そうでない場合は表示されません。

于 2013-05-03T08:50:05.250 に答える
0

private は、クラス自体からのみアクセスできることを意味します。静的かどうかは関係ありません。このルールの例外ではありませんが...

クリストフ

于 2013-05-03T08:45:06.780 に答える