2011-10-20 10 views
3

Possible Duplicate:
Why can I only access static members from a static function?なぜ静的メソッドは、私はエラーを得た静的メソッドの内部から、通常のメソッドを呼び出そうとしている間だけの静的メソッドではない非静的メソッド

を呼び出すことが許可されていますクラスのオブジェクトを作成し、非静的メソッドを呼び出す必要があることを意味します。メソッドを直接呼び出す場合は、そのメソッドをStaticとして宣言する必要があります。

ただし、このシナリオでは、呼び出し元のメソッドと呼び出されたメソッドが同じクラスに属しています。だから、静的メソッドから呼び出すときにオブジェクトを作成する必要があるのに対して、静的でないメソッドから非静的メソッドを呼び出すことができるのはなぜですか。

例:

class Program 
    { 
     //public void outTestMethod(int x,out int y) 
     //{ 
     // y = x; 
     //} 
     static void Main(string[] args) 
     { 
      int a = 10; 
      int b = 100; 

      outTestMethod(a,out b); 
     } 

     private void outTestMethod(int x, out int y) 
     { 
      y = x; 
     } 
    } 

Error:An object reference is required for the non-static field, method, or property

+0

あなたの例では、 'private static void outTestMethod'を実行するだけで動作します。あなたが言ったように、「オブジェクトを作成する」必要はありません。 – Icarus

+0

エラーとは、エラーを意味します。静的メソッドは静的メンバーにのみアクセスできます(参照するインスタンスがないため)。静的メソッドはプログラムインスタンスのメンバーにアクセスできます(この特定のサンプルには何もありません)。クラスの複数のインスタンスを持つこと。 –

答えて

6

静的メソッドコールインスタンスメソッド - しかし、あなたはそれらを呼び出すためにインスタンスを持っている必要があります。同じである - インスタンスメソッドは静的メソッドではなく、全体的なタイプに関連付けられているのに対し、タイプの特定のインスタンスに関連付けられている

int a = 10; 
int b = 100; 
Program program = new Program(); 
program.outTestMethod(a,out b); 

:そのインスタンスは、特にどこから来る例えばので、それは問題ではありません他の種類のメンバーにも当てはまります。だから、インスタンスメソッドを呼び出すために、あなたはインスタンスあなたが興味を持っているを知っておく必要がありますたとえば、持っている意味がありません:あなたは、あなたがしている人を知っている必要があるため

string name = Person.Name; 

を話題:

Person person = FetchPersonFromSomewhere(); 
string name = person.Name; 

...これはもっと意味があります。

通常、インスタンスメソッドは、インスタンスの状態を使用または変更します。

0

このメソッドを呼び出すインスタンスが存在しないためです。場合によっては別のクラスを作成してテストする必要があります。

class Program 
{ 
    static void Main(string[] args) 
    { 
     int a = 10; 
     int b = 100; 
     Test testclass = new Test(); 
     testclass.outTestMethod(a,out b); 
    } 
} 

class Test 
{ 

    public void outTestMethod(int x, out int y) 
    { 
     y = x; 
    } 
} 
1

非静的メソッドはインスタンスメソッドとも呼ばれます。これは、メソッドが動作するインスタンス(オブジェクト)に固有のデータのチャンクが存在することを意味します(通常は)。

非静的メソッドまたはインスタンスメソッドは、どのインスタンスまたはオブジェクトを操作するのかわからないため、静的メソッドから呼び出すことはできません。

4

このように考えてください。

静的メソッドは、エレベーターの銀行の外にあるボタンです。誰でもそれを見てプッシュして何かを起こすことができます(エレベーターの1つがそのフロアに到着します)。

非静的メソッドは、特定のエレベータ内のボタンです。彼らはそのエレベーターを操作します(そして他のエレベーターは操作しません)。

0

インスタンスメソッドと静的メソッドの違いを理解していますか?

インスタンスメソッドは、パラメータとして渡されていなくてもthisオブジェクトにアクセスできます。実際には、フレームワークによって渡された同じタイプのクラスの目に見えないパラメータのようです。

静的メソッドは、そのthisオブジェクトを持っていないと、それは目に見えない形でそのthisのために渡すために何を持っていないため

は冗談のように聞こえるが、これは方法Iである...インスタンスメソッドを呼び出すことはできませんそれを見てください:)

関連する問題