zukucode
主にWEB関連の情報を技術メモとして発信しています。

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メソッドはstephelperクラスの状態)を参照しているため、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

HelperUtilといったような汎用的なクラスは基本的には状態を持たないことが多いので、クラスに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;
    }
}


関連記事

  • vscode C#のusingを自動で設定するショートカット

    vscodeでC#のusing文を自動で設定するショートカットを紹介します。「The type or namespace name XXX could not be found (are you mi...


  • C# クラスのnewと一緒にプロパティを設定する

    C#でクラスをnew(インスタンス生成)するときに、一緒にプロパティを設定する方法を紹介します。例えば、以下のようなクラスがあるとします。インスタンスを生成して、プロパティを設定する以下のような処理を...


  • ASP.NET CORSの設定を行う

    ASP.NETのWebAPIでCORSの設定を行う方法を紹介します。例えばWEBページのURLがlocalhost:3000で、WebAPIのURLがlocalhost:5000のとき、WEBページか...


  • Windows 10 範囲を指定して画面のスクリーンショットを撮る方法

    Windows 10で範囲を指定して画面のスクリーンショットを撮る方法を紹介します。画面全体の指定した部分のみを切り取ってクリップボードに保存します。Windows 7を使っていた頃は、WinShot...


  • Windows 10 クリップボードの履歴を複数管理して貼り付ける方法

    Windows 10でクリップボードの履歴を複数管理して貼り付ける方法を紹介します。通常コピーした文字列は、別の値をコピーすると、最初にコピーした文字列は消えてしまいます。例えば以下の手順で貼り付けを...


  • WEBアプリでプッシュ通知を実装する

    WEBアプリでプッシュ通知を実装する方法を紹介します。googleが紹介している以下のページを参考にしました。ウェブアプリへのプッシュ通知の追加 | Web | Google Develope...


  • JavaScript WEBアプリのプッシュ通知の許可を取り消す方法

    WEBアプリでプッシュ通知を実装するでWEBアプリでプッシュ通知を実装する手順を紹介しましたが、ここでは逆にプッシュ通知削除する方法を紹介します。先のページで紹介したように、ページロード時に以下のよう...


  • webpack postcssを導入する

    webpackでpostcssを導入してautoprefixerなどを行います。postcss-loaderはwebpackでpostcssを行うために必要です。postcssの設定ファイルを作成しま...


  • webpack lessをImportしてビルドする

    htmlやbodyなどに適用するベースのクラスを外部のlessファイルに実装して、スタイルをサイト全体に適用したい場合があります。外部のlessファイルをモジュールとしてImportしてwebpack...


  • webpack-dev-serverでhttpsでのアクセスを可能にする方法

    webpack-dev-serverでhttpsでのアクセスを可能にする方法を紹介します。外部APIのテストや、メディアデバイスのテストなどで、開発中のlocalhostをhttpsにする必要があると...