Передача переменных из функции Main в другой класс C#

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

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

РЕДАКТИРОВАТЬ: Сильно отредактированный код ниже. Значения переменных, которые я хотел бы повторно использовать в другом классе, находятся посередине. Есть еще, но этих 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();
        }
    }
}

person mynameisneo    schedule 03.01.2012    source источник
comment
вы имеете в виду string[] args, которые передаются вашей функции Main? Можете ли вы показать код, который вы создали до сих пор?   -  person Default    schedule 03.01.2012
comment
У вас есть пример кода, чтобы показать, что происходит не так? Это бы нам немного помогло.   -  person Herman Cordes    schedule 03.01.2012
comment
Выложите код своего консольного приложения, пожалуйста.   -  person tom redfern    schedule 03.01.2012
comment
Понятия не имею, что вы здесь спрашиваете. Что вы подразумеваете под повторным использованием?   -  person RickNZ    schedule 03.01.2012


Ответы (4)


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

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

Просматривая ваш пример, я могу определить 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 или веб-службу).

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

person Devendra D. Chavan    schedule 03.01.2012

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

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

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

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

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

person Amir Fahmideh    schedule 03.01.2012

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

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

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

person john    schedule 19.07.2017

Класс 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";
}
person CodingBarfield    schedule 03.01.2012