Почему я не могу вызвать публичный метод в другом классе? - PullRequest
12 голосов
/ 01 декабря 2008

Эти два класса взаимодействуют между собой, и я пытаюсь вызвать четыре разных класса из первого класса для использования во втором классе.

Методы общедоступны и возвращают значения, но по какой-то причине соединение не устанавливается. Ошибка, которую я получаю при попытке: "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'

Я даже не понимаю, что это значит ...

EDIT: Я только что исправил эту проблему благодаря функции Step Into в Visual Studio. Я не знаю, почему это заняло у меня так много времени.

Ответы [ 4 ]

39 голосов
/ 01 декабря 2008

Вы пытаетесь вызвать метод экземпляра в классе. Чтобы вызвать метод экземпляра в классе, вы должны создать экземпляр для вызова метода. Если вы хотите вызвать метод не для экземпляров, добавьте ключевое слово 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());
}
12 голосов
/ 01 декабря 2008

Звучит так, будто вы не создаете экземпляр своего класса. Это основная причина, по которой я получаю ошибку «ссылка на объект обязательна».

MyClass myClass = new MyClass();

как только вы добавите эту строку, вы можете вызвать свой метод

myClass.myMethod();

Кроме того, все ли ваши классы находятся в одном и том же пространстве имен? Когда я только начинал изучать c #, для меня это было обычным делом.

4 голосов
/ 01 декабря 2008

Вы должны создать переменную типа класса и установить ее равной сначала новому экземпляру объекта.

GradeBook myGradeBook = new GradeBook();

Затем вызовите метод для только что созданного вами объекта.

myGradeBook.[method you want called]
2 голосов
/ 01 декабря 2008

Например, для 1 и 2 вам нужно создать статические методы:

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

Тогда для примера 3 вам нужен экземпляр вашего объекта для вызова метода:

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