У меня есть метод в program.cs, который я хочу передать в свой собственный класс - PullRequest
0 голосов
/ 29 октября 2010

Как я могу перевести pigTalk () в свой класс?

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);
        }
    }
}

Ответы [ 4 ]

4 голосов
/ 29 октября 2010

Создайте новый класс и переместите в него pigTalk,

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

в методе Main измените вызов pigTalk на этот,

YourClassName.pigTalk(sentence)
2 голосов
/ 29 октября 2010

Кажется, что все остальные ответили на ваш вопрос, и поэтому я немного размышляю здесь, но одна вещь, которая может вызвать путаницу, заключается в том, что в качестве операционного метода, содержащегося в вашем основном классе, имеет смысл иметь существующийметод return void (поскольку все выполняется в контексте «Program», поэтому нет никакой дополнительной информации для передачи), но в качестве отдельного метода, вероятно, было бы более целесообразно возвращать результирующий текст, а не записывать его в консольпрямо из вспомогательного метода;Таким образом, вызывающий объект может быть ответственным за знание того, что делать с результатами.

В ограниченном контексте, не обязательно неправильно, чтобы метод выводил результаты на консоль и оставлял это как есть, но у вас больше гибкости, если ваш метод просто выполняет операцию как объявлено и оставляет еедо более высокой власти, чтобы определить, что делать с результатами.Таким образом, вы можете подумать об изменении метода с чего-то вроде

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

на что-то более похожее на

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

, когда издатель метода отправляет вывод на консоль (если это то, чтовы хотите сделать), сделав что-то вроде этого:

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

Кроме того, это может быть более сложным, чем вы ищете (хотя это не так сложно, когда вы понимаете концепцию), но это выглядит такхороший пример использования метода расширения, который маскирует необходимость использования вспомогательных классов, подобных тем, которые вам, вероятно, понадобятся здесь.Чтобы сделать что-то подобное, вы просто изменили бы свой первый входящий аргумент (в данном случае ваш единственный), чтобы применить квалификатор «this» ... чтобы вы получили что-то вроде этого:

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

делая это, метод становится доступным как расширенный метод самого строкового объекта, так что вы можете сделать что-то подобное в своей основной программе:

Console.WriteLine(sentence.PigTalk());

вместо того, чтобы делать что-то вроде этого:

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

Как я уже сказал, это может быть излишним для того, что вам нужно, поэтому я надеюсь, что я не вызвал путаницы с этим маленьким кроличьим следом.

1 голос
/ 29 октября 2010

Это домашнее задание? Вот что ты должен сделать. Сначала создайте новый файл класса с именем «Pig.cs» в том же каталоге, что и ваш основной файл. Каждый класс должен иметь свой собственный файл, но если вы поместите файлы классов в отдельный каталог в своем решении, эти классы будут находиться в другом пространстве имен. Вы должны научиться работать с пространствами имен, изучая C #, но мы пока отложим это в сторону.

Pig.cs должен содержать класс с именем Pig, определенный следующим образом:

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

        // your code here

        return result;
    }
}

Тогда в вашей основной программе должно быть что-то вроде этого:

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 голос
/ 29 октября 2010

Создайте новый файл класса, а затем обрежьте (Ctrl + X) и вставьте (Ctrl + V) метод из program.cs в новый файл класса.

Затем вызовите метод с помощью {YourClassName}.pigTalk ()

...