2017-04-21 1 views
-6

私は次のコードがエラーなしでコンパイルされていることに気づいた:Bar以来静的なクラスメソッドでプライベート非静的クラスプロパティにアクセスするのはなぜですか?

public class Foo 
{ 

    private string identifier; 

    public Foo() { } 

    private static void Bar(Foo foo) 
    { 
     Console.WriteLine($"{foo.identifier}"); 
    } 

} 

が静的​​である、これはidentifierが表示されていないという例外をスローべきではないのですか?

+7

なぜでしょうか? 'identifier'はメソッドに渡されたインスタンスに属します。そのインスタンスの通常のインスタンスメンバです。 – HimBromBeere

+3

アクセス修飾子は*オブジェクト*ではなくクラス*を制御します。 –

+0

コードが渡されたパラメータにアクセスするため、私はあなたの混乱をここに見当たりません。 – DavidG

答えて

4

識別子...

fooが静的メソッドのパラメータはFooの部材であるFoo.Bar

fooがインスタンスの静的メソッドによってアクセスされるインスタンスに

を指しそれ自身のクラス...

はうまく動作します

関連する問題