Использование экземпляра класса в другом классе - PullRequest
2 голосов
/ 16 апреля 2011

Прошу прощения за мое невежество, я перехожу с VB6 на C # (очень крутая кривая обучения). Я погуглил это до смерти, и я не в состоянии понять это. Я создал экземпляр класса в своей основной форме:

namespace App1_Name
{
    public partial class Form1 : Form
    {
        public cConfig Config = new cConfig();
    }
}

В моем классе Config я создаю два других класса:

namespace App1_Name
{
    class cConfig
    {
        //Properties
        public cApplication Application = new cApplication();
    }
}

В моем классе cApplications у меня есть следующее:

namespace App1_Name
{
    class cApplication
    {
        //Properties
        public string ApplicationName { get { return "App Name"; } }
    }
}

Итак, в другом классе я собираюсь использовать класс, который я создал в Form1, следующим образом:

namespace App1_Name
{
    class cXML
    {
        public void Method1()
        {
            Console.WriteLine(Config.Application.ApplicationName);)
        }
     }
}

Но я получаю сообщение об ошибке, в котором говорится, что «Конфиг» не существует в текущем контексте, что я здесь не так делаю?

Ответы [ 4 ]

4 голосов
/ 16 апреля 2011

Не скучаете ли вы по экземпляру Form1?

Form1 form = new Form1();    
Console.WriteLine(form.Config.Application.ApplicationName);

потому что вы работаете со свойствами ... не статическими классами и статическими методами.

2 голосов
/ 16 апреля 2011

Я думаю, вы хотите это:

Console.WriteLine(Form1.Config.Application.ApplicationName);

РЕДАКТИРОВАТЬ: Dampe правильно;вам нужен экземпляр Form1, так как Config не является статическим членом класса.Пожалуйста, обратитесь к его ответу.

1 голос
/ 16 апреля 2011

Все вышеперечисленное или однострочник:

Console.WriteLine(new Form1().Config.Application.ApplicationName);
0 голосов
/ 17 апреля 2011

Хорошо, чтобы заставить мой оригинальный код работать, я сделал cApplication Static.Это потому, что я создавал экземпляр cXML в событии Form_Load в Form1, поэтому вышеприведенные решения просто создали бесконечный цикл.

Что я сделал, чтобы решить эту проблему, так это передать класс Config в качестве ссылки на класс cXML следующим образом:

namespace App1_Name
{
    public partial class Form1 : Form
    {
        public cConfig Config = new cConfig();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        cXML XML = new cXML();
        XML.Config = Config; //Passing the Config Class by Reference to cXML
    }
}

В классе cXML я делаю следующее:

namespace App1_Name
{
    class cXML
    {
        public cConfig Config;

        public string AppName
        {

            Console.WriteLine(Config.Application.AppName);
        }
    }
}

Это именно то, что я изначально намеревался сделать.Мой новый вопрос: это приемлемый способ сделать это?

...