web-dev-qa-db-fra.com

Pourquoi ne puis-je pas appeler une méthode publique dans une autre classe?

J'ai ces deux classes qui interagissent et j'essaie d'appeler quatre classes différentes de la classe un pour une utilisation en classe deux.

Les méthodes sont publiques et renvoient des valeurs, mais pour une raison quelconque, aucune connexion n'est établie. L'erreur que j'obtiens lorsque j'essaye est: "An object reference is required for the nonstatic field, method, or property 'GradeBook.[method I want called]'"


J'ai tout initialisé. Je ne veux pas créer de méthodes statiques. J'ai relu les détails de mon devoir et je ne suis même pas censé le faire, mais je n'arrive pas à faire en sorte que cela fonctionne de toute façon.

myGradeBook. [méthode] GraceBook. [méthode]

Tout cela semble créer des erreurs.

Les erreurs actuelles:

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

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

Je ne sais même pas ce que cela signifie ...

EDIT: Je viens de résoudre ce problème grâce à la fonctionnalité Step Into de Visual Studio. Je ne sais pas pourquoi il m'a fallu si longtemps pour l'utiliser.

12
Harris

Vous essayez d'appeler une méthode d'instance sur la classe. Pour appeler une méthode d'instance sur une classe, vous devez créer une instance sur laquelle appeler la méthode. Si vous souhaitez appeler la méthode sur des non-instances, ajoutez le mot-clé statique. Par exemple

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

Il semble que vous n'instanciez pas votre classe. C'est la principale raison pour laquelle j'obtiens l'erreur "une référence d'objet est requise".

MyClass myClass = new MyClass();

une fois que vous avez ajouté cette ligne, vous pouvez ensuite appeler votre méthode

myClass.myMethod();

De plus, toutes vos classes sont-elles dans le même espace de noms? Quand j'ai commencé à apprendre le c #, c'était un point de déclenchement commun pour moi.

12
discorax

Vous devez d'abord créer une variable du type de la classe et la définir égale à une nouvelle instance de l'objet.

GradeBook myGradeBook = new GradeBook();

Appelez ensuite la méthode sur l'objet que vous venez de créer.

myGradeBook.[method you want called]
4

Par exemple 1 et 2, vous devez créer des méthodes statiques:

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

Ensuite, par exemple 3, vous avez besoin d'une instance de votre objet pour appeler la méthode:

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