Une référence d'objet est requise pour le champ non statique, une méthode ou une propriété
Je sais que les gens ont demandé à propos de cette question avant, mais le scénario est trop précis et je suis confus au sujet des principes fondamentaux.
J'ai deux versions de base d'un programme C#, celui qui travaille et celui qui ne l'est pas. J'aimerais si quelqu'un pouvait expliquer pourquoi j'ai l'erreur Une référence d'objet est requise pour le champ non statique, la méthode ou la propriété dans le second programme.
Travaux:
namespace Experiments
{
class Test
{
public string myTest = "Gobbledigook";
public void Print()
{
Console.Write(myTest);
}
}
class Program
{
static void Main(string[] args)
{
Test newTest = new Test();
newTest.Print();
while (true)
;
}
}
}
Ne fonctionne pas:
namespace Experiments
{
class Test
{
public string myTest = "Gobbledigook";
public void Print()
{
Console.Write(myTest);
}
}
class Program
{
public Test newTest = new Test();
static void Main(string[] args)
{
newTest.Print();
while (true)
;
}
}
}
Quand j'essaie de Print() le texte de la Test() classe dans le deuxième programme, il me donne cette erreur Une référence d'objet est requise pour le champ non statique, la méthode ou la propriété, et je ne comprends pas pourquoi. Je peux voir qu'il a à faire avec où je déclare une instance de Test() de la classe, mais je ne me souviens pas de quelque chose comme ce qui se passe en C++, il mystifie moi.
Ce qu'il se passe?
OriginalL'auteur Simflare | 2016-10-20
Vous devez vous connecter pour publier un commentaire.
Il n'est pas à cause de la définition de la classe, il est tout au sujet de l'utilisation de mot-clé
statique
.La
newTest
objet de la classeTest
est un membre du public de la classeProgram
et lamain
est une fonction statique à l'intérieur du programme de la classe. et c'est clrealy mentionné dans le message d'erreurAn object reference is required for the non-static method
. Donc, ce que vous avez besoin est de Déclarer lanewTest
objet statique afin d'avoir accès à des méthodes statiques comme principal.comme ce
Un Note Supplémentaire
Considérer que la vaisselle de la définition de la méthode
Print
commestatic
à l'intérieur de la classeTest
comme suit:Alors vous ne pouvez pas appeler la méthode que vous utilisez actuellement(
newTest.Print();
). Au lieu de cela, vous devez utiliserTest.Print();
, Depuis Un membre statique ne peut pas être référencée par le biais d'un exemple. Au lieu de cela, il est référencé par le nom du type. Considérons, par exemple, la classe suivantesuite précédente - tout comme les variables globales sont découragés en C++?
Je vous remercie pour votre bien pensé réponse btw 🙂
Je ne pense pas que l'utilisation de variables statiques est une mauvaise pratique, vous pouvez l'utiliser si c'est nécessaire. mais je ne préfère pas les variables statiques des applications web, car ils ont de la portée de l'application, il y
Ok. Merci beaucoup, vous avez été très utile 🙂
OriginalL'auteur sujith karivelil
Dans le premier programme que vous avez créé une nouvelle instance à l'intérieur d'un statique méthode. À l'intérieur de cette méthode, c'est OK, rien à faire.
Mais quand vous voulez l'appeler certaines méthodes ou accéder à certaines variables en dehors de méthodes statiques, vous en avez besoin pour être statique. La raison en est lorsque vous appelez une méthode statique, aucune instance d'une classe est faite et, par conséquent, aucun cas de non-variables statiques sont encore et vous n'avez pas accès à eux!
Donc, dans le deuxième programme de la newTest variable d'initiation de la ligne n'est pas exécutée jusqu'à ce que vous avez une ligne de code en dehors de Programme classe comme
Program p = new Program();
. La solution est de vous rendre la variable statique pour être en mesure d'accéder à l'extérieur de la statique Print() méthode, Ou vous pouvez convertir votre Min() méthode non-statique de la mode qui est impossible pour Main() méthode exceptionnellement.Si vous souhaitez définir une variable globale, alors je vous suggère de définir une classe spéciale e.x. MyGlobals:
J'ai édité ma réponse à montrer une certaine façon, pour la définition des variables globales en C#. Veuillez vérifier ma réponse encore une fois. J'espère être utile pour vous.
Merci d'avoir pris le temps de partager ça 🙂
OriginalL'auteur Amin