web-dev-qa-db-ja.com

別のクラスでパブリックメソッドを呼び出せないのはなぜですか?

私はこれら2つのクラスを相互作用させており、クラス2で使用するためにクラス1から4つの異なるクラスを呼び出そうとしています。

メソッドはパブリックであり、戻り値を返しますが、何らかの理由で接続が確立されていません。試したときに発生するエラーは次のとおりです:"An object reference is required for the nonstatic field, method, or property 'GradeBook.[method I want called]'"


すべてを初期化しました。メソッドを静的として作成したくありません。私は自分の割り当ての詳細をもう一度読みましたが、私はそうするつもりはありませんが、とにかくこれを言葉で言うとうまくいかないようです。

myGradeBook。[メソッド] GraceBook。[メソッド]

すべてエラーが発生するようです。

現在のエラー:

The best overloaded method match or 'System.Console.WriteLine(string, object)' has some invalid arguments.

Arugment '2': cannot convert from 'method group' to 'object'

私はそれらが何を意味するのかわからない...

編集:Visual Studioのステップイン機能のおかげで問題を修正しました。なぜこんなに長く使ったのかわかりません。

12
Harris

クラスのインスタンスメソッドを呼び出そうとしています。クラスのインスタンスメソッドを呼び出すには、メソッドを呼び出すインスタンスを作成する必要があります。非インスタンスでメソッドを呼び出す場合は、staticキーワードを追加します。例えば

class Example {
  public static string NonInstanceMethod() {
    return "static";
  }
  public string InstanceMethod() { 
    return "non-static";
  }
}

static void SomeMethod() {
  Console.WriteLine(Example.NonInstanceMethod());
  Console.WriteLine(Example.InstanceMethod());  // Does not compile
  Example v1 = new Example();
  Console.WriteLine(v1.InstanceMethod());
}
39
JaredPar

クラスをインスタンス化していないようです。これが、「オブジェクト参照が必要です」というエラーが表示される主な理由です。

MyClass myClass = new MyClass();

その行を追加したら、メソッドを呼び出すことができます

myClass.myMethod();

また、すべてのクラスが同じ名前空間にありますか?私が最初にc#を学んでいたとき、これは私にとって一般的なつまずきでした。

12
discorax

クラスのタイプの変数を作成し、それを最初にオブジェクトの新しいインスタンスに等しく設定する必要があります。

GradeBook myGradeBook = new GradeBook();

次に、作成したオブジェクトのメソッドを呼び出します。

myGradeBook.[method you want called]
4

たとえば、1と2の場合、静的メソッドを作成する必要があります。

public static string InstanceMethod() {return "Hello World";}

次に、例3では、メソッドを呼び出すためにオブジェクトのインスタンスが必要です。

object o = new object();
string s = o.InstanceMethod();
2
gmc