2009-04-25 8 views
1

Considérez cette classe:C# Console Problème

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Game.Items 
{ 
    class Item 
    { 
     private string name; 
     public string Name 
     { 
      get { return this.name; } 
     } 

     private string description; 
     public string Description 
     { 
      get { return this.description; } 
     } 

     public Item(string name, string description) 
     { 
      this.name = name; 
      this.description = description; 
     } 

     public override string ToString() 
     { 
      return this.name; 
     } 
    } 
} 

Je crée alors un nouvel objet comme celui-ci:

Item item1 = new Item("Item1", "Description..."); 

Maintenant, le problème, je ne peux pas accéder aux propriétés de l'objet avec la méthode getter, à savoir cela ne fonctionne pas:

Console.WriteLine(item1.Name); 
Console.WriteLine(item1.Description); 
Console.ReadLine(); 

par « ne fonctionne pas » je veux dire quand je clique sur « Démarrer le débogage », la fenêtre de la console apparaît, mais rien g est là, c'est vide. Cependant, cela fonctionne très bien:

Console.WriteLine(item1); // ToString() 
Console.ReadLine(); 

Qu'est-ce que je fais mal?

Richard

+0

Si vous n'avez pas, essayez d'installer l'essai gratuit de 30 jours de ReSharper - il détecte et offre de fixer de nombreuses choses comme les problèmes d'espace de noms, les problèmes de protection et autres joyeusetés ... ainsi que suggérer bonnes conventions de nommage - bon matériel d'apprentissage. –

+0

Quand vous dites "ça ne marche pas", que voulez-vous dire? Erreur de compilateur? Erreur d'exécution? Résultat incorrect? Crashing? –

+0

La nouvelle ligne est-elle imprimée ou rien du tout? Que diriez-vous du 'Console.ReadLine'? Est-ce que ça marche? –

Répondre

3

fonctionne bien pour moi:

using System; 

namespace Application 
{ 
    class Test 
    { 
     static void Main() 
     { 
      Item item1 = new Item("Item1", "Description..."); 
      Console.WriteLine(item1.Name); 
      Console.WriteLine(item1.Description); 
     } 
    } 
} 

(. Avec votre classe là aussi)

Quand vous dites "cela ne fonctionne pas" exactement ce qui se passe mal?

+0

Eh bien, quand je clique sur "Démarrer le débogage", la fenêtre de la console apparaît mais elle est vide. Rien n'est là. Les deux commandes: Console.WriteLine (item1.Name); Console.WriteLine (item1.Description); Ils ne font rien. Seulement cela fonctionne (ToString()): Console.WriteLine (item1); –

+0

S'il vous plaît ajouter cette information à votre question (ou quelqu'un avec suffisamment de rep pour tôt ou tard je devine; (essayez également d'inclure le code réel et la structure de classe/fichier/namespace utilisée) –

+1

Étant donné que mon programme court mais complet fonctionne très bien, On dirait que vous faites quelque chose d'étrange - veuillez poster un programme court mais complet qui montre ce comportement étrange –

0

Travaillez-vous votre classe principale dans un projet différent du projet où "Item" est contenu? si oui, alors

  • Référence autre projet
  • Mark classe d'objet comme du public

    public class Item { 
        // your code 
    } 
    

Ou vous pouvez essayer d'accéder à cette façon de voir si le problème est lié à espaces de noms

Console.WriteLine(Application.item1.Name); 
Console.WriteLine(Application.item1.Description); 

De même, mettez une pause après le e XECUTION, ou bien la fenêtre de votre console va sans vous montrer quoi que ce soit

Console.ReadLine(); 

Vérifiez également les clauses en utilisant, selon le dernier commentaire, vous devez alors utiliser une clause en utilisant en haut du fichier dans lequel vous essayez de utiliser la classe article

using Game; 
+0

A propos de la seule chose à laquelle je pouvais penser, déclarant la classe elle-même publique si elle était utilisée en dehors de l'espace de noms du projet ... –

+0

J'ai ajouté la clause using et cela ne fonctionne toujours pas :( –

+0

obtenez-vous une erreur? –