Передача переменных из функции Main в другой класс C # - PullRequest
3 голосов
/ 03 января 2012

Я довольно сильно бью головой об стену. У меня есть несколько переменных внутри консольного приложения C #, которые я хотел бы использовать повторно. Однако я не могу повторно использовать переменные в другом классе. Я хотел бы любую помощь или указатели, которые вы можете предоставить - я искал в течение некоторого времени, и я полностью в замешательстве.

РЕДАКТИРОВАТЬ: Да, переменные находятся внутри моей функции Main. Извините, что пропустил это.

РЕДАКТИРОВАТЬ: сильно отредактированный код ниже. Значения переменных, которые я хотел бы использовать в другом классе, находятся посередине. Их больше, но этих 3 должно быть достаточно для выборки. Спасибо за помощь !!!

public static class MyApp
    {
        static void Main(string[] args)
        {
            // loads XML doc
            foreach (XmlNode node in nodes)
            {
            try
                {
                    // does a bunch of stuff

                    // Parses variables from REST API

                    XDocument docdetailxml = XDocument.Parse(xmldoc);

                    XNamespace ns = docdetailxml.Root.GetDefaultNamespace();

                    var buid = docdetailxml.Root.Element(ns + "busid").Value;
                    var bname = docdetailxml.Root.Element(ns + "busname").Value;
                    var bcount = docdetailxml.Root.Element(ns + "buscount").Value;

                    // Invoke SQL connection string

                    // Trigger Stored Procedure and write values to database

                    // If needed, trigger email notification

                    // Close connections
                }
                catch (Exception e)
                {

                    Console.WriteLine("Error encountered: " + e.Message);

                    // Exit the application
                    System.Environment.Exit(1);

                }
                finally
                {
                    // Exit the application
                    // System.Environment.Exit(0);
                }

            }

        }

        private static void GetConnectionString()
        {
            throw new NotImplementedException();
        }

        private static void GetConnectionStrings()
        {
            throw new NotImplementedException();
        }
    }
}

Ответы [ 4 ]

2 голосов
/ 03 января 2012

вы должны определить публичную собственность или публичное поле

public class Student
{
public string Name {get;set;}
}

и когда вы хотите передать значение, вы можете присвоить это значение свойству

Student st = new Student(); 
st.Name = "your value";

или вы также можете использовать конструктор класса.

2 голосов
/ 03 января 2012

Если переменная обозначает некоторую информацию об объекте (например, имя, идентификатор и т. Д.), То они должны быть заключены в класс .Экземпляр класса (называемый object ) должен использоваться для доступа к этой информации.

Поскольку у вас уже есть переменные, которые представляют объект, следующим шагом будет группировка этих переменных в классы.Эти переменные представлены в классе как properties .Операции, выполняемые с этими элементами, должны быть доступны как методов .Кроме того, модификаторы доступа определяют видимость членов.

Проходя по вашему примеру, я могу выделить 3 переменные, которые представляют клиента (предположим, я не уверен в точном случае использования),Они сформируют класс Customer.

class Customer
{
    // You can either pass the UID through the constructor or 
    // expose a public setter to allow modification of the property
    public Customer(string uid)
    {
        this.UID = uid;
    }

    public string UID { get; private set; }
    public string Name { get; set; }
    public string Count { get; set; }
}

Кроме того, цикл foreach можно разбить на 2 части для обеспечения устойчивости

  1. Считывание из узлов xml и создание список клиентов
  2. Выполнение операций базы данных (таких как хранимые процедуры триггера, запись значений и т. д.) в списке клиентов

Кроме того, вы можете создать другой класскоторый выполняет операции (бизнес-логику), которые вы выполняете в консольном приложении.Это позволит вам повторно использовать ту же логику в случае, если вы перенесете ее в другое приложение (например, winforms или веб-сервис).

Дополнительная информация

1 голос
/ 19 июля 2017

Я думаю, что на этом сайте есть специальный форум для стоек, лучше поискать там для получения дополнительной информации.

Быстрый ответ: основной способ передачи значений из одного действия в другое (я думаю, что вы работаете с классами действий Struts?) - это помещение значений в запрос или сеанс (поэтому первая задача для вас - прочитать на эти темы: HttpServletRequest и HttpSession). Классы действий Struts выполняют свою работу в методе execute (), и этот метод имеет параметр типа HttpServletRequest. Из запроса вы можете получить дескриптор сессии.

И методы запроса и сессии предлагают методы getAttribute () и setAttribute (). Таким образом, чтобы передать данные из одного действия в другое, установите эти данные как атрибут (запрос или сеанс), а затем снова считайте атрибут в следующем действии.

0 голосов
/ 03 января 2012

Класс Program, вероятно, является статическим, поэтому вам придется обращаться к этим полям по имени класса, а не по экземпляру.

class Program
{
    public string Name = "a name";

    static void Main(string[] args)
    {
        Name = "Hello"; //You can't do this, compile error
        Program p = new Program();
        p.Name = "Hi"; //You can do this

        SecondName = "Sn"; //You can do this
        Program.SecondName = "Tr"; //You can do this too
    }
    public static string SecondName = "Peat";
}
...