-2
public static void callit(ref int var)  
{  
   var++;  
}  
public static void main(Object sender, EventArgs e)  
{  
   int num=6;  
   callit(ref num);  
   Console.WriteLine(num);  
}

しかし、ここでメソッド callit() が静的でない場合は、クラスのオブジェクトを作成してから呼び出す必要がありました。

4

9 に答える 9

3

そのとおりです。非静的メソッドは、オブジェクトのインスタンスで呼び出す必要があります。メソッドが実際にはオブジェクトの他のメンバーを使用していない場合でも、コンパイラはインスタンス メソッドがインスタンスを必要とするという規則を適用します。一方、静的メソッドはインスタンスで呼び出す必要はありません。それがそれらを静的にするものです。

于 2011-05-26T16:38:01.267 に答える
2

まさにそれが静的メソッドの要点だからです。

インスタンス メソッドでは、メソッドを呼び出すクラスのインスタンスを知る必要があります。

instance.Method();

その後、クラス内のインスタンス変数を参照できます。

一方、静的メソッドはインスタンスを必要としませんが、インスタンス変数にアクセスできません。

class.StaticMethod();

この例は次のようになります。

public class ExampleClass
{
    public int InstanceNumber { get; set; }

    public static void HelpMe()
    {
        Console.WriteLine("I'm helping you.");
        // can't access InstanceNumber, which is an instance member, from a static method.
    }

    public int Work()
    {
        return InstanceNumber * 10;
    }
}

このクラスのインスタンスを作成して、Work()その特定のインスタンスでメソッドを呼び出すことができます

var example = new ExampleClass();
example.InstanceNumber = 100;
example.Work();

ただし、キーワードは、クラスの特定のインスタンスではなくクラスにバインドされているためstatic、メソッドを呼び出すためにインスタンス参照が必要ないことを意味しますHelpMe()

ExampleClass.HelpMe();
于 2011-05-26T16:39:22.850 に答える
1

MSDNはそれを非常によく説明していると思います

Static classes and class members are used to create data and functions that can be accessed without creating an instance of the class. Static class members can be used to separate data and behavior that is independent of any object identity: the data and functions do not change regardless of what happens to the object. Static classes can be used when there is no data or behavior in the class that depends on object identity.

このトピックの詳細については、こちらをご覧ください

于 2011-05-26T16:38:24.997 に答える
1

あなたの質問を正しく理解していれば、これは単に C# 構文の問題です。callit(ref num);あなたの例で使用することにあいまいさはありません。これは静的メソッドであり、オブジェクトがアタッチされていないため、どのメソッドを呼び出すかは正確にわかっています。一方、静的でない場合、静的メソッド (オブジェクトを持たない)からcallit呼び出しているため、コンパイラはメソッドを呼び出すオブジェクトを認識しません。そのため、新しいオブジェクトを作成し、そのオブジェクトでメソッドを呼び出す必要があります。

もちろん、どちらのメソッドも静的でない場合、メソッド呼び出しはそれ自体で動作し、オブジェクトは既知であるため、問題はありません。

于 2011-05-26T16:38:30.323 に答える
0

静的メソッドは型 (またはクラス) で呼び出されますが、非静的メソッドは型のインスタンス、つまりクラスのオブジェクトで呼び出されます。

複数のオブジェクト (つまり、同じ型のインスタンス) が存在する可能性があるため、静的メソッドで非静的メソッドまたは非静的変数を呼び出すことはできません。

于 2011-05-26T16:40:34.543 に答える
0

静的メソッドはインスタンスに依存しません。非静的であるeatメソッドと静的であるsleepメソッドがあるという点でmanクラスがあるとします。次に、manの異なるインスタンスを作成するときに、man m1、m2としましょう。m1 と m2 は同じスリープ方法を共有していますが、食べる方法は異なります。Java では、すべての静的変数はヒープ メモリに格納されます。ヒープ メモリはすべてのオブジェクト インスタンスで共有され、実行時に静的変数が変更された場合、case.m1 および m2 のオブジェクトのすべてのインスタンスで共有されます。ただし、非静的変数を変更すると、そのオブジェクトインスタンスのみが対象になります

m1.anStaticvariable = 1; // m2.anStaticvariable の値も変更します But m1.nonStaticvariable = 1; // m2.nonStaticvariable を変更しません

これがお役に立てば幸いです

于 2011-05-26T16:47:15.090 に答える
0

静的関数はクラスで機能します。メンバー関数はインスタンスで機能します。

はい、オブジェクト (インスタンス) のメンバー関数のみを呼び出すことができます。インスタンスもメンバーもありません。

于 2011-05-26T16:38:00.483 に答える
0

静的メソッドは、特定のオブジェクト インスタンスではなく、クラス自体に関連付けられているためです。

于 2011-05-26T16:37:26.120 に答える
0

静的関数は、他の静的関数およびインスタンス関数と同じようにアクセスできるクラス変数にアクセスします。というクラス変数がある場合static int count、静的メソッドでは変数が 1static increaseCount() { count++; }増加し、静的メソッドでは変数が 1 減少します。countstatic decreaseCount() { count--; }count

したがって、静的関数とインスタンス関数の両方が静的変数にアクセスできますが、静的関数はインスタンス変数にアクセスできません。

静的関数は、クラス関数とも呼ばれます。非静的関数はインスタンス関数とも呼ばれます。

于 2011-05-26T16:42:32.523 に答える