2008-12-01 8 views
11

J'ai ces deux classes en interaction et j'essaie d'appeler quatre classes différentes de la classe un pour une utilisation en classe deux.Pourquoi ne puis-je pas appeler une méthode publique dans une autre classe?

Les méthodes sont publiques et elles renvoient des valeurs mais, pour une raison quelconque, aucune connexion n'est établie. L'erreur que je reçois lorsque je tente 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 les méthodes comme statiques. J'ai relu les détails de mon devoir et je ne suis même pas supposé le faire, mais je n'arrive pas à le faire fonctionner de toute façon je le dis.

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

Tout 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 suis même pas sur ce que signifie les ....

EDIT: Je viens fixe ce problème grâce à la fonction de l'étape Dans Visual Studio. Je ne sais pas pourquoi ça m'a pris tellement de temps à l'utiliser.

+0

S'il vous plaît ajouter plus de précisions comme comment vous appelez la méthode, est-ce une méthode statique, ou une méthode d'instance, etc Sinon, cette question sera laissée à l'interprétation .. Tous les meilleurs. –

+1

Eh bien, j'ai appris quelque chose de vos devoirs ... – discorax

Répondre

4

Vous devez créer une variable du type de la classe et la définir d'abord comme une nouvelle instance de l'objet. Puis appelez la méthode sur l'obect que vous venez de créer.

myGradeBook.[method you want called] 
+0

Pourquoi cela a-t-il un vote négatif? –

+0

Ma faute, j'ai mal lu quelque chose et j'étais sur stackoverflow quand j'étais très fatigué. Je peux; t annuler mon downvote maintenant cependant ;-( – JoshBerke

+0

Vous pouvez cliquer à nouveau sur la flèche vers le bas de vote pour annuler un vote vers le bas –

36

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é static. 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()); 
} 
+0

Quand je change la méthode que je veux appeler pour dire statique alors les variables à l'intérieur de cette méthode deviennent fous et je – Harris

+3

Oui, vous pouvez - si vous voulez appeler une méthode d'instance, appelez-la sur une instance, c'est le seul moyen logique, sinon c'est comme demander à "chien" de courir au lieu de demander un chien * particulier * à exécuter –

+0

question de suivi pour mon avantage Pouvez-vous appeler la méthode statique sans jamais créer une instance de la classe, car il semble que ce que vous faites dans l'exemple. pour essayer ceci lundi Merci pour le partage – discorax

12

Il semble que vous n'instanciez pas votre classe. C'est la principale raison pour laquelle je reçois l'erreur "Une référence d'objet est requise".

MyClass myClass = new MyClass(); 

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

myClass.myMethod(); 

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

+2

+1 parce que cela ressemble à une bonne réponse. Celui qui a downvoted ceci, je souhaite qu'ils commenteraient ici. – Karl

2

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(); 
Questions connexes