C#: Une référence d'objet est requise pour la non-statique champ, une méthode ou une Propriété
Je me sens mal pour vous pose cette question quand il ya tellement de nombreuses questions qui sont liés, mais je n'étais pas en mesure de trouver/comprendre la réponse, je suis à la recherche d'.
//2. Développer un programme pour convertir une monnaie en X de la monnaie Y et vice versa.
using System;
class Problem2
{
static void Main (string[] args)
{
while (true) {
Console.WriteLine ("1. Currency Conversion from CAD to Won");
Console.WriteLine ("2. Currency Conversion from Won to Cad");
Console.Write ("Choose from the Following: (1 or 2)? ");
int option = int.Parse( Console.ReadLine() );
//double x;
if (option == 1) {
Console.WriteLine ("Type in the amount you would like to Convert CAD to Won: ");
//double y =double.Parse( Console.ReadLine());
//Console.WriteLine( cadToWon( y ) );
Console.WriteLine( cadToWon( double.Parse( Console.ReadLine() ) ));
}
if (option == 2) {
Console.WriteLine ("Type in the amount you would like to Convert Won to CAD: ");
Console.WriteLine( wonToCad (double.Parse( Console.ReadLine())));
}
}
}
double cadToWon( double x )
{
return x * 1113.26;
}
double wonToCad( double x)
{
return x / 1113.26;
}
}
Cette me donner l'Erreur messgae "Une référence d'objet est requise pour la non-champ statique, la méthode ou la propriété 'Problem2..." je sais que je vais être en mesure d'exécuter le programme si j'ajoute statique en face de la méthode, mais je me demande pourquoi j'en ai besoin (je pense que c'est parce que le Principal est statique?) et que dois-je changer dans l'ordre à ces méthodes, sans ajout de statique?
Merci
Ouais lol mais les gens que vous avez entendu et compris une explication. Merci!
OriginalL'auteur Charles Han | 2012-10-21
Vous devez vous connecter pour publier un commentaire.
Depuis votre Principale méthode est statique, cadToWon et wonToCad aussi être statique si vous voulez les appeler de main.
L'autre option serait de casser toute la logique de votre Main, cadToWon, et wonToCad méthodes dans un nouvelle classe, et puis avez-vous la Principale méthode de simplement mettre en place et exécuter cette nouvelle classe. Mais je pense que peut-être au-delà de la portée de votre affectation.
Pour répondre à votre question, de pourquoi ajoutant statique qui rend ce travail:
static
méthodes sont partagé sur toutes les instances d'une classe. Pour n'importe quelle instance de la classeProblem2
vous êtes, il n'y a qu' unMain
méthode qui est partagé entre tous.cadToWon
, cependant, est un instance méthode. Il appartient à une particulier instance de la classeProblem2
.En conséquence, vous ne pouvez pas appeler
cadToWon
deMain
, depuisMain
ne sais pas ce que instance deProblem2
appelercadToWon
.Main
ne sait pas ce qu'instance d'appelcadToWon
depuisMain
n'est pasbelong
à toute instance.bien sûr, vous avez raison. Il pourrait créer une nouvelle instance de la classe Problems2, et d'appeler cadToWon sur l'instance de l'intérieur Principal. Je veux juste garder les choses simples pour l'OP.
Il sait que ce qui les rend le travail statique... Sa question était pourquoi et comment le faire fonctionner sans statique? Un peu bizarre que tout le monde répondre à "rendre statique" à cette question.
en effet. Je vous remercie pour cette. J'ai ajouté une explication pour lui.
Merci à vous deux, Adam et Marc-André
OriginalL'auteur Adam Rackis
Faire vos méthodes
static
permettra de résoudre ce problème. Vous ne pouvez pas appeler un membre de l'instance (non précédé avecstatic
) à partir d'une méthode statique (par exemple,static void main(..)
). Il soit les deux d'entre eux doivent être déclarésstatic
ou vous en créer une instance de la classe dans laquelle les méthodes et accéder par le biais de l'instance. Je ne pense pas que vous avez besoin iciAccéder par exemple
Vous en avez besoin, parce que
main
est statique. Ma réponse concerne la manière de pas ajouterstatic
et encore d'appeler les méthodes de création de l'instance deProgram2
OriginalL'auteur codingbiz
C'est parce que le Principal, étant statique, n'est pas affecté à n'importe quelle instance de Problem2. Ne sachant pas à quelle instance de Problem2 d'envoyer la variable, il est impossible d'appeler la bonne méthode.
Dès maintenant, votre méthode ne modifie pas les champs de tous les Problem2. Mais ils le pouvaient, et c'est la tout le problème. Quelle instance de Problem2 doivent-elles évoluer? La méthode statique n'a aucun moyen de le savoir.
Donc, si vous avez initialisé une instance de Problem2, on pourrait appeler sa propre version de la méthode à partir de la statique Principal.
OriginalL'auteur LightStriker
Cette solution est exactement le même que celui recherché ici.
En essayant de passer d'un objet à partir Statique Principal dans une méthode dans la Classe: le Programme est quasiment impossible sans:
OriginalL'auteur Laurie Stearn
Si vous ne voulez pas pour les changer en statique, puis il suffit de les déplacer dans une autre classe, et puis, à l'intérieur de créer un objet et utiliser les fonctions.
OriginalL'auteur Bogdan Alexandru