次の方法で共有


コンパイラ エラー CS0120

静的でないフィールド、メソッド、またはプロパティ 'member' で、オブジェクト参照が必要です

静的でないフィールド、メソッド、またはプロパティを使用するには、まずオブジェクト インスタンスを作成する必要があります。 静的メソッドの詳細については、「静的クラスと静的クラス メンバー」を参照してください。 クラスのインスタンスの作成方法については、「インスタンス コンストラクター」を参照してください。

例 1

次の例では CS0120 が生成されます。

// CS0120_1.cs
public class MyClass
{
    // Non-static field.
    public int i;
    // Non-static method.
    public void Method() { }
    // Non-static property.
    public int Prop
    {
        get
        {
            return 1;
        }
    }

    public static void Main()
    {
        i = 10;   // CS0120
        Method();   // CS0120
        int p = Prop;   // CS0120
    }
}

このエラーを解決するには、まずクラスのインスタンスを作成します。

// CS0120_1.cs
public class MyClass
{
    // Non-static field.
    public int i;
    // Non-static method.
    public void Method() { }
    // Non-static property.
    public int Prop
    {
        get
        {
            return 1;
        }
    }

    public static void Main()
    {
        var mc = new MyClass();
        mc.i = 10;
        mc.Method();
        int p = mc.Prop;
    }
}

例 2

CS0120 は、次のように静的メソッドから非静的メソッドへの呼び出しがある場合にも生成されます。

// CS0120_2.cs
public class MyClass
{
    public void Method() { }

    public static void Main()
    {
        Method();   // CS0120
    }
}

このエラーを解決するには、まずクラスのインスタンスを作成します。

// CS0120_2.cs
public class MyClass
{
    public void Method() { }

    public static void Main()
    {
        var mc = new MyClass();
        mc.Method();
    }
}

例 3

同様に、明示的にクラスのインスタンスを指定しない限り、静的メソッドでインスタンス メソッドを呼び出すことはできません。次に例を示します。

// CS0120_3.cs
using System;

public class MyClass
{
    public static void Main()
    {
        DoIt("Hello There");   // CS0120
    }

    private void DoIt(string sText)
    {
        Console.WriteLine(sText);
    }
}

このエラーを修正するため、メソッド定義にキーワード static を追加することもできます。

// CS0120_3.cs
using System;

public class MyClass
{
    public static void Main()
    {
        DoIt("Hello There");
    }

    private static void DoIt(string sText)
    {
        Console.WriteLine(sText);
    }
}

関連項目