2010-10-29 26 views
-1

Comment puis-je transférer pigTalk() dans sa propre classe?J'ai une méthode dans le programme.cs que je veux transférer dans sa propre classe

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

namespace FunctionTest 
{ 
    public class Program 
    { 
     public static void pigTalk(string sentence) 
     { 
      try 
      { 
       while (sentence != "exit") 
       { 
        string firstLetter; 
        string afterFirst; 
        string pigLatinOut = ""; 
        int x; 
        string vowel = "AEIOUaeiou"; 

        string[] pieces = sentence.Split(); 

        foreach (string piece in pieces) 
        { 
         afterFirst = piece.Substring(1); 
         firstLetter = piece.Substring(0, 1); 
         x = vowel.IndexOf(firstLetter); 

         if (x == -1) 
         { 
          pigLatinOut = (afterFirst + firstLetter + "ay "); 
         } 
         else 
         { 
          pigLatinOut = (firstLetter + afterFirst + "way "); 
         } 
         Console.Write(pigLatinOut); 
        } 
       } 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.ToString()); 
      } 
     } 

     public static void Main(string[] args) 
     { 
      Console.WriteLine("Enter a sentence to convert into PigLatin"); 
      string sentence = ""; 

      sentence = Console.ReadLine(); 

      pigTalk(sentence); 
     } 
    } 
} 
+1

Je vous suggère de commencer par apprendre la différence entre une apostrophe '' 'et une virgule', ' –

+0

@mvid: Correction pour eux –

+0

quoi? je connais la différence. Bon dieu les gars ici sont très intellegent mais pas très gentil. –

Répondre

4

Créer une nouvelle classe et déplacer le pigTalk à lui,

namespace FunctionTest 
{ 
    class YourClassName 
    { 
     // move the pigTalk here 
    } 
} 

dans la méthode principale changer l'appel de pigTalk à cela,

YourClassName.pigTalk(sentence) 
+0

Merci, je vais essayer! –

+0

Vous êtes les bienvenus, et bonne chance. –

+0

+1 C'est vraiment facile, et ça devrait vraiment l'être. Il est bon d'apprendre à le faire et de s'y sentir à l'aise, parce que votre code développe une meilleure structure si vous appliquez des techniques comme celle-ci - refactorings - avec facilité. Notez que si cela n'avait pas été une méthode statique, vous auriez dû créer une instance de YourClassName avant de pouvoir appeler la méthode, et vous auriez besoin de l'appeler un peu différemment. –

1

Créer un nouveau fichier de classe, puis Coupez (Ctrl + X) et Collez (Ctrl + V) la méthode de program.cs dans votre nouveau fichier de classe.

appeler ensuite la méthode avec {} YourClassName .pigTalk()

+0

Ok, je l'ai fait mais j'ai une erreur. Le nom "PigLatinClass" n'existe pas dans le contexte actuel. La ligne que j'ai ajoutée était PigLatinClass.pigTalk (phrase); –

1

Est-ce un devoir? Voici ce que vous devez faire. Tout d'abord, créez un nouveau fichier de classe nommé "Pig.cs" dans le même répertoire que votre fichier principal. Chaque classe doit avoir son propre fichier, mais si vous placez les fichiers de classe dans un répertoire séparé au sein de votre solution, ces classes seront dans un espace de noms différent. Vous devrez apprendre à gérer les espaces de noms au fur et à mesure que vous apprenez C#, mais nous allons mettre cela de côté pour l'instant.

Pig.cs doit contenir une classe appelée Pig, défini comme suit:

public class PigLatin 
{ 
    public string TranslateFromEnglish(string message) 
    { 
     string result = ""; 

     // your code here 

     return result; 
    } 
} 

Ensuite, dans votre programme principal, vous devriez avoir quelque chose comme ceci:

public static void Main(string[] args) 
{ 
    PigLatin pl = new PigLatin(); 
    string englishSentence = ""; 
    string pigLatinSentence = ""; 

    Console.WriteLine("Enter a sentence to convert into Pig Latin.\n"); 

    englishSentence = Console.ReadLine(); 

    pigLatinSentence = pl.TranslateFromEnglish(englishSentence); 

    console.WriteLine(string.Format("{0}\n", pigLatinSentence)); 
} 
+1

+1 pour "Est-ce un travail à faire";) – jcolebrand

+0

Honnêtement, je n'ai pas pu résister. Cela m'a rappelé les affectations de mes propres classes de programmation d'introduction, seulement je n'ai pas utilisé C# et .NET; J'ai été coincé avec C et la bibliothèque standard sur une station SPARC exécutant Solaris. Bon temps. –

+0

ce n'est pas un devoir. Cela faisait un moment que je ne faisais aucun codage et j'essayais d'y revenir. hey c'est mieux que "hello world" hehe. –

2

Tout le monde semble d'autre J'ai répondu à votre question, et donc je suis en train de spéculer ici, mais une chose qui pourrait causer de la confusion est le fait que comme méthode opérationnelle contenue dans votre classe principale, il est logique d'annuler la méthode existante (parce que tout est fait dans le contexte de "Progra m ", donc il n'y a pas d'informations supplémentaires à transmettre), mais en tant que méthode séparée, il serait probablement plus logique de renvoyer le texte résultant plutôt que de l'écrire directement à la console à partir de la méthode helper; De cette façon, l'objet appelant peut être responsable de savoir quoi faire avec les résultats. Dans un contexte limité, il n'est pas forcément faux d'avoir la méthode d'imprimer les résultats à la console et de le laisser comme ça, mais vous avez plus de flexibilité si votre méthode effectue simplement l'opération comme annoncé et la laisse à une autorité supérieure pour déterminer ce qu'il faut faire avec les résultats. Donc, vous pouvez envisager de modifier la méthode de quelque chose comme ça

public static void pigTalk(string sentence) 
{ 
<perform operation> 
Console.WriteLine(pigTalkOut); 
} 

à faire quelque chose comme

public static string pigTalk(string sentence) 
{ 
<perform operation> 
return pigTalkOut; 
} 

Lorsque l'émetteur de la méthode envoie la sortie à la console (si c'est ce que vous voulez faire) en faisant quelque chose comme ceci:

Console.WriteLine([HelperClassName].Pigtalk(sentence)); 

de plus, cela peut être plus complexe que vous cherchez (si ce n'est pas vraiment difficile une fois que vous comprenez le concept), mais cela semble l Comme un bon exemple pour l'utilisation d'une méthode d'extension, ce qui masque le besoin de classes d'utilité comme celle dont vous auriez probablement besoin ici. Pour faire quelque chose comme ça, vous devez simplement changer votre premier argument entrant (dans ce cas le seul) pour appliquer le qualificatif "this" ...donc vous retrouver avec quelque chose comme ceci:

public static class [HelperClassName] 
{ 
public static string Pigtalk(this string sentence) 
{ 
    <perform current operation and return PigtalkOut> 
} 
} 

en faisant cela, la méthode est disponible en tant que méthode étendue de l'objet chaîne elle-même, de sorte que vous pouvez faire soemthing comme ceci dans votre programme principal:

Console.WriteLine(sentence.PigTalk()); 

au lieu d'avoir à faire quelque chose comme ceci:

Console.WriteLine([HelperClassName].Pigtalk(sentence)); 

comme je l'ai dit, cependant, que peut-être exagéré pour ce que vous avez besoin, donc j'espère ne pas avoir causé de la confusion avec cette litt le sentier du lapin.

+0

Merci beaucoup! C'est exactement ce que je veux faire. Je vais essayer. –