0
0

More than 1 year has passed since last update.

C#・Java での static クラスの違い

Posted at

static について

直訳では、「静的の」意味。
C#Javaで共通の性質
staticメソッドは、メソッドが属しているクラスのインスタンスを生成しなくても使用できる。

Javaのstaticクラス

Javastaticクラスは、staticメソッドから呼び出すために設定するクラス。
(これに限ってstaticクラスを使うわけではないと思いますが、ここではこの様に説明しておきます)
staticメソッドの中では、staticクラスをnewで生成することができる。
例としては、下記のようなコードになります。
(packageの記述は省略してあります)

sample.java
public class ClassP{
    // staticなメソッド
    private static int methodB() {
        ClassA a = new ClassA();
        a.i += 1;
        return a.i;
    }

    // methodB() で生成するためのstaticなクラス
    private static class ClassA{
        public int i = 5;
    }
}

C#のstaticクラス

C#でのstaticクラスは、インスタンス化ができない。つまり、newで生成することができません。
下記は、Microsoftのドキュメントでの説明です。
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/static-classes-and-static-class-members
つまり、staticメソッドでクラスをインスタンス化する場合は、クラスはstaticでない必要があります。
上記にあるsample.javaをC#で下記の様になります。

sample.cs
public class ClassP{
    // staticなメソッド
    private static int methodB() {
        ClassA a = new ClassA();
        a.i += 1;
        return a.i;
    }

    // methodB() で生成するためのクラス
    // Javaの場合は、ClassA は static である必要がある
    private class ClassA{
        public int i = 5;
    }
}

終わりに

C#Javaのコードは、packageの記述の有無や、useimportかの違いで見分けがつきますが、staticクラスはどちらにも有り、そのうえで性質が違うので、気を付けたいところですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0