メソッドに静的キーワードを追加するとはどういう意味ですか?
public static void doSomething(){
//Well, do something!
}
static
キーワードをクラスに追加できますか?それはどういう意味ですか?
メソッドに静的キーワードを追加するとはどういう意味ですか?
public static void doSomething(){
//Well, do something!
}
static
キーワードをクラスに追加できますか?それはどういう意味ですか?
回答:
static
関数は、定期的に(とは異なり、インスタンス)関数、クラスのインスタンスに関連付けられていません。
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
別の観点から:単一の文字列にいくつかの変更を加えることを検討してください。たとえば、文字を大文字にするなどです。これらのアクションのために「Tools」という名前の別のクラスを作成します。「Tools」クラスのインスタンスを作成する意味はありません。これは、そのクラス内で使用可能なエンティティの種類がないためです(「Person」または「Teacher」クラスと比較してください)。したがって、インスタンスを作成せずに「Tools」クラスを使用するために静的キーワードを使用し、クラス名(「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();
}
}
}
クラスのインスタンスが作成されていない場合でも、静的メソッド、フィールド、プロパティ、またはイベントはクラスで呼び出すことができます。クラスのインスタンスが作成された場合、それらを使用して静的メンバーにアクセスすることはできません。静的フィールドとイベントのコピーは1つだけ存在し、静的メソッドとプロパティは静的フィールドと静的イベントにのみアクセスできます。静的メンバーは、オブジェクトの状態に応じて変化しないデータまたは計算を表すためによく使用されます。たとえば、数学ライブラリには、正弦と余弦を計算するための静的メソッドが含まれている場合があります。静的クラスメンバーは、membeの戻り値の型の前にstaticキーワードを使用して宣言されます
間もなく、静的クラスをインスタンス化できなくなります。例:
static class myStaticClass
{
public static void someFunction()
{ /* */ }
}
このようにすることはできません:
myStaticClass msc = new myStaticClass(); // it will cause an error
あなただけが作ることができます:
myStaticClass.someFunction();
staticキーワードは、クラスに適用されると、そのクラスの単一のインスタンスを作成するようコンパイラーに指示します。その場合、クラスの1つ以上のインスタンスを「新規」にすることはできません。静的クラスのすべてのメソッドは、それ自体が静的であると宣言する必要があります。
非静的クラスの静的メソッドを持つことは可能であり、しばしば望ましいことです。たとえば、別のクラスのインスタンスを作成するときのファクトリメソッドは、静的と宣言されることがよくあります。これは、factorメソッドを含むクラスの特定のインスタンスが不要であることを意味するためです。
どのように、いつ、どこで、MSDNを参照してください。
static
クラスは、まったくのインスタンスを持っていません。