2016-10-20 11 views
1

静的とは、その変数またはメソッドがクラス自体に属し、ClassName.StaticMethodNameで使用できることを意味します。つまり、問題は次のとおりです。別の非静的メソッド内で非静的メソッドを使用できますが、静的メソッドで非静的メソッドを使用することはできません。私はなぜ非静的メソッドを別の非静的メソッドの中で使用できるのか理解できません。非静的メソッドを使用するオブジェクトが必要ないのですか?静的メソッドの場合、クラス名を使用する必要があり、それで十分です。しかし、なぜメソッドを使うためにオブジェクトが必要ないのですか?例:静的メソッドと非静的メソッドについて

//このコードではエラーは発生しません。私にはわからないことがありますか?たぶんC#methodB()の前に隠しオブジェクトを追加する?

ClassA() 
{ 
    public void methodA() 
    { 
    methodB(); 
    } 
    public void methodB() 
    { 
    } 
} 
+0

コードはエラーを生成しませんが、オブジェクトインスタンスなしでそれらの関数を呼び出すことはできません – dahui

+2

メソッドBはthis.methodBとして内部的に呼び出されます。つまり、クラスの同じインスタンスを共有しています – JerryGoyal

+0

inside methodB inside methodAでは、すでにClassAのインスタンス、つまりオブジェクト自体を作成しています。 – Owuor

答えて

5

我々は 別の非静的メソッド内で非静的メソッドを使用することができますなぜ私は理解していませんか?

非静的メソッドを呼び出すには、そのメソッドを呼び出すことができるオブジェクトインスタンスが必要です。この例では、ClassAのインスタンス化されたインスタンスなしではMethodAを呼び出すことはできません。

このため、MethodAの内部にある場合、この関数が実行されている既存のインスタンスが存在する必要があります。このため、MethodBの呼び出しは、MethodAが現在実行中のオブジェクトと同じオブジェクトに対して呼び出されているので有効です。

1

Staticは基本的に、そのメソッドを使用するためにオブジェクトの新しいインスタンスを作成する必要がないことを意味します。

public static class ClassA 
{ 
    public static void Run() 
    { 

    } 
} 

これはClassA.Run();のように呼び出すことができます。同じを使用します。あなたは(冗長であるthisながら)Run()this.AnyOtherMethod();の内部で呼び出されるClassBに別の方法を得たとき

ClassB b = new ClassB(); //Create a new Instance of type ClassB 
b.Run();     

をので:

public class ClassB 
{ 
    public void Run() 
    { 

    } 
} 

あなたがこれを行う必要がありRun実行するにはインスタンスRun()が呼び出されました。

0

あなたは、静的および非静的メソッドを持つクラスを持っているような状況の例を見てみましょう:

 
public class A 
{ 
    private int a; 

    public A(int value) 
    { 
     this.a = value; 
    } 

    public static int MethodA() 
    { 
     return MethodB(); 
    } 

    public int MethodB() 
    { 
     return a; 
    } 
} 

は、我々はこれをコンパイルすることができ、そして我々は(作成、それを構築することなく、このクラスを使用しようとすることを想像してみてクラスのインスタンス)。我々は実行時に 'a'の値を知りません。したがって、静的メソッド内でインスタンスメソッドを使用することはできません。

関連する問題