как вернуть значения из одного класса в другой?

Я делаю программу, которая имеет три класса:

  1. Выходной класс получает данные от двух других классов, записывает в две новые строки, объединяет специальным форматированием в другую строку и выводит ее.
  2. В классе AidaF есть метод, который каждую секунду возвращает значение (строку).
  3. Класс GmailF имеет метод, который возвращает значение (строку) каждую минуту или около того.

поэтому я устал использовать return string; для возврата данных из классов 2 и 3 в первый класс, но это просто возвращает значение в текущий класс, а не в первый класс.

Вот этот код, над которым я работаю, но он сильно уменьшился. но основы есть.

namespace Final
{
    public class Output
    {
        public static void Main()
        {
            Console.WriteLine(gml + aida);
        }
    }

    public class AidaF
    {
        private static System.Timers.Timer aTimer;

        public static void AMain()
        {
            aTimer = new System.Timers.Timer(1000);
            aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
            aTimer.Interval = 1000;
            aTimer.Enabled = true;
        }


        private static void OnTimedEvent(object source, ElapsedEventArgs e)
        {
            ...
            reader.ReadToFollowing("value");
            aida.Append(reader.ReadElementContentAsString()).Append(",");
            return aida;
            ...
        }
    }

    public class GmaillF
    {
        private static System.Timers.Timer gTimer;

        public static void GMain()
        {
            gTimer = new System.Timers.Timer(200000);
            gTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent1);
            gTimer.Interval = 200000;
            gTimer.Enabled = true;
        }

        private static void OnTimedEvent1(object source, ElapsedEventArgs e)
        {
            CheckMail();
        }

        public static string CheckMail()
        { 
          ...
          gml.Append(reader.ReadElementContentAsString()).Append(",");
          return gml;
          ...
        }
    }
}

person Csharpz    schedule 09.09.2011    source источник
comment
Я действительно не понимаю, о чем вы спрашиваете, но вы, кажется, хотите рассматривать классы как процедуры/функции... на самом деле это не так, практически или семантически. :-П   -  person Noldorin    schedule 10.09.2011
comment
я хочу вернуть значения из классов 2 и 3, чтобы класс 1 мог что-то с ними сделать.   -  person Csharpz    schedule 10.09.2011
comment
Вы пытаетесь заново изобрести наблюдаемый шаблон сбора? То есть под коллекцией обычно понимают нечто, из чего вы извлекаете информацию по одному, например список клиентов. Наблюдаемая коллекция доводит информацию до потребителей, которые в ней заинтересованы.   -  person Eric Lippert    schedule 10.09.2011
comment
Классы не возвращают значения; классы представляют виды вещей. Класс Newspaper представляет класс всех объектов, которые являются газетами. Методы возвращают значения.   -  person Eric Lippert    schedule 10.09.2011
comment
Эрик Липперт совершенно прав. Чтение основных принципов объектно-ориентированного программирования может помочь...   -  person Noldorin    schedule 10.09.2011
comment
хорошо, спасибо, другой человек посоветовал мне, что это будет хороший способ сделать это (2 класса для двух разных частей, а затем 3-й для вывода).   -  person Csharpz    schedule 10.09.2011
comment
вот где мне посоветовали: title="как объединить код c двух похожих, но отдельных программ"> stackoverflow.com/questions/7314638/   -  person Csharpz    schedule 10.09.2011


Ответы (1)


Вам нужно вызвать открытые статические методы из вызывающего класса, чтобы заставить это работать, поэтому, например, ваш main будет выглядеть примерно так:

public static void Main() {
Console.WriteLine(GmailF.CheckMail() + AidaF.OnTimedEvent());
}

Я просто предполагаю, что CheckMail и OnTimedEvent - это строки, которые вы пытаетесь вернуть. И CheckMail, и OnTimedEvent должны быть общедоступными статическими строками, чтобы вышеизложенное работало.

person erito    schedule 09.09.2011