C# クラスをnewせずにクラス内のメソッドを実行する
C#
でクラスをnew
(インスタンス生成)せずに、クラス内のメソッドを実行する方法を紹介します。
例えば以下のクラスがあるとします。
public class Hepler
{
public int Increment(int number) {
return number + 1;
}
}
Increment
メソッドを呼びたいときは以下のようにする必要があります。
int a = 1;
var helper = new Hepler();
int b = hepler.Increment(a); // b = 2
new
(インスタンス生成)せずに、Increment
メソッドを呼びたいときはstatic
メソッドにする必要があります。
Increment
メソッドにstatic
のキーワードを追加します。
public class Hepler
{
public int Increment(int number) {
public static int Increment(int number) {
return number + 1;
}
}
static
メッソドにすれば以下のようにnew
(インスタンス生成)せずにメソッドを呼ぶことができます。
int a = 1;
int b = Hepler.Increment(a); // b = 2
注意点
以下のようにstatic
メソッドの外にある変数を参照しているとstatic
メソッドにすることはできません。
public class Hepler
{
public int step = 3;
public static int Increment(int number) { // コンパイルエラー
return number + step;
}
}
これは、以下のようにHelper
クラスがstep
という状態を保持しており、Increment
メソッドはstep
(helper
クラスの状態)を参照しているため、static
メソッドにすることはできません。
int a = 1;
var helper = new Hepler();
helper.step = 2;
int b = hepler.Increment(a); // b = 3
helper.step = 3;
int c = hepler.Increment(a); // c = 4
Helper.Increment(a); // stepの値がわからない
// インスタンス生成をしてHelperクラスの状態を確定させる必要がある
var helper = new Hepler();
int d = hepler.Increment(a); // d = 4
Helper
やUtil
といったような汎用的なクラスは基本的には状態を持たないことが多いので、クラスにstatic
キーワードを追加して、そのクラス内のメソッドをすべてstatic
にするよう強制すると良いかと思います。
public class Hepler
public static class Hepler
{
public int Decrement(int number) { // コンパイルエラー
public static int Decrement(int number) {
return number - 1;
}
public static int Increment(int number) {
return number + 1;
}
}