あなたはSystem.Array
の継承ほとんどの時間は、1次元配列を使用しています。以下のような:
int[] a1 = new int[2];
あなたがint[]
を定義し、この暗黙的@Sergey RybalkinようSystem.Array
型から派生氏は述べています。この場合、メソッドIndexOf
は必ず静的メソッドではなくインスタンスメソッドとして実装するのが最適です。
しかしMULT次元アレイのようなのSystem.Arrayを継承する別の種類があります。この場合(多次元)、方法IndexOf
は意味をなさない。この
テスト:
int[,] arr = new int[2, 2];
arr[0, 0] = 3; arr[1, 0] = 4;
arr[0, 1] = 5; arr[1, 1] = 6;
Array.IndexOf(arr, 4);
は次のように最後があるため、このメソッドはstaticとして実装されていることで、おそらくおそらくメッセージ"Only single dimension arrays are supported here."
とRankExceptionをスローし、そして。
...
コメントIs there a main principle behind the decision, whether to make a method static or not?
についてあり、そして原理は非常に簡単です。インスタンスメソッドは、オブジェクトのアクションまたは動作を表します。静的メソッドは、クラスに関連するロジック、または場合によってはクラスのインスタンスを作成せずに呼び出すメソッドであるシステムの関数です。
Sqrt
またはPow
のようなメソッドを呼び出すたびにインスタンス数学が必要な場合、どのように混乱するかをSystem.Math
で考えてみてください。私はあなたに与える
最後の例は、System.Text.RegularExpressions.Regex
クラスです。このクラスは、インスタンスとして実装されたMatch
メソッドと、静的として実装されたオーバーロードを持っています。
それぞれがdiferent文脈で使用されます。このインスタンスは、同じパターンを複数回使用する場合に使用されます。コード内で一意の時刻を使用すると、静的です。
( 'Array'などのデザインはASP.NETに関連していないので、私は、ASP.NETタグを削除) –
私はありませんでした彼らはのみのアレイと拡張メソッドのために意図されているので、それらのほとんどは静的で規定うその時に発明された。 – Romoku
@Romokuそれらは依然としてインスタンスメソッドである可能性がありますが、 –