2016-12-14 6 views

答えて

7

通常、静的メソッド内で非静的メソッドを呼び出すことはできません。

これは、過度の単純化です。デフォルトの "this"オブジェクトがないため、単一のメソッド名を指定することで、独自のクラスで非静的メソッドを呼び出すことはできません。あなたは、インスタンスメソッド内

SomeMethod(arg1, arg2); 

を書くときの静的メソッドは「この」にはアクセスできませんので、C#が、

this.SomeMethod(arg1, arg2); 

同じトリックは、静的メソッドの内部では動作しませんとして解釈します。

しかし、クラスインスタンスを使用する場合は、上記を実行できます。

これは、いったん別のオブジェクトを提供すると、「this」オブジェクトを探す必要がないからです。

8

質問は簡単です:このインスタンスでメソッドを呼び出そうとしていますか?どのようなローカルフィールドを仮定すべきか?

SomeInstanceMethod()を呼び出すと暗黙的にthis.がコンパイラによって追加されるので、これらの質問に対する答えは「現在のもの」です(技術的には、 arg0の値)。だからSomeInstanceMethod()と入力すると、コンパイラはthis.SomeInstanceMethod()を意味するものとみなします。

静的メソッドの場合、暗黙のうちに追加することができるthisはありません。インスタンスメソッドを呼び出すことはできますが、ターゲットインスタンスを明示的に指定する必要があります。 someObj.SomeInstanceMethod()は問題なく動作します。インスタンスメソッドのsomeObj.SomeInstanceMethod()を使用して、別のインスタンスのコンテキストでメソッドを呼び出すこともできます。

関連する問題