web-dev-qa-db-ja.com

C#の "静的メソッド"とは何ですか?

Staticキーワードをメソッドに追加するとどうなりますか?

public static void doSomething(){
   //Well, do something!
}

staticキーワードをクラスに追加できますか?それはどういう意味ですか?

170
Moshe

static関数は、通常の(instance)関数とは異なり、クラスのインスタンスに関連付けられていません。

staticクラスはstaticメンバーのみを含むことができるクラスであり、したがってインスタンス化することはできません。

例えば:

class SomeClass {
    public int InstanceMethod() { return 1; }
    public static int StaticMethod() { return 42; }
}

InstanceMethodを呼び出すには、クラスのインスタンスが必要です。

SomeClass instance = new SomeClass();
instance.InstanceMethod();   //Fine
instance.StaticMethod();     //Won't compile

SomeClass.InstanceMethod();  //Won't compile
SomeClass.StaticMethod();    //Fine
295
SLaks

別の観点から見ると、単一のStringに対していくつかの変更を加えたいとします。例えば、あなたは文字を大文字などにしたいのです。あなたはこれらのアクションのために "Tools"という名前の別のクラスを作ります。 "Tools"クラスのインスタンスを作成する意味はありません。そのクラス内には利用可能なエンティティが存在しないからです( "Person"または "Teacher"クラスと比較して)。そのため、インスタンスを作成せずに "Tools"クラスを使用するためにstaticキーワードを使用します。クラス名の後に "ドット"を押すと( "Tools")、必要なメソッドにアクセスできます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Tools.ToUpperCase("Behnoud Sherafati"));
        Console.ReadKey();
    }
}

public static class Tools
{
    public static string ToUpperCase(string str)
    {
        return str.ToUpper();

    }
}
}
25

クラスのインスタンスが作成されていない場合でも、静的メソッド、フィールド、プロパティ、またはイベントはクラスで呼び出すことができます。クラスのインスタンスが作成された場合、それらを使用して静的メンバーにアクセスすることはできません。静的フィールドと静的イベントのコピーは1つだけ存在し、静的メソッドと静的プロパティは静的フィールドと静的イベントにのみアクセスできます。静的メンバーは、オブジェクトの状態に応じて変化しないデータまたは計算を表すためによく使用されます。たとえば、数学ライブラリには、サインとコサインを計算するための静的メソッドが含まれている場合があります。静的クラスメンバは、membeの戻り型の前にstaticキーワードを使用して宣言されます。

13
Alborz

静的関数とは、それがクラス(クラスの特定のインスタンスではなくクラス自体)に関連付けられていることを意味し、クラスインスタンスが存在しない場合でも呼び出すことができます。

静的クラスは、クラスが静的メンバーのみを含むことを意味します。

5
mih

手短に言えば、静的クラスをインスタンス化することはできません。

static class myStaticClass
{
    public static void someFunction()
    { /* */ }
}

あなたはこのようにすることはできません。

myStaticClass msc = new myStaticClass();  // it will cause an error

あなただけが作ることができます:

myStaticClass.someFunction();
4
r.mirzojonov

メソッドに "static"キーワードを追加すると、基礎となる実装がそのクラスのすべてのインスタンスに対して同じ結果をもたらすことを意味します。言うまでもなく、結果はパラメータの値の変化によって変わります

0
Balaji