Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Предача обьекта в другой метод, Предача обьекта 
V
    Опции темы
Stratus
Дата 26.1.2010, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 27.5.2009

Репутация: нет
Всего: нет



Коллеги,
подскажите плиз как можно передать экземпляр обьекта созданного в одном методе в другой метод того же класса?
PM MAIL   Вверх
KuMa1104
Дата 26.1.2010, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Бр..... 
Цитата(Stratus @  26.1.2010,  00:20 Найти цитируемый пост)
подскажите плиз как можно передать экземпляр обьекта созданного в одном методе в другой метод того же класса? 



Я так понемаю вам нужно что то вроде этого:
Код

class a
{
class b
    {
    }
    class a
    {
        public b BB;
        public void func1()
        {
            BB = new b();
        }
        public void func2(b temp)
        {
            //.............
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            a AA = new a();
            AA.func1();
            AA.func2(AA.BB);
        }
    }
}

Не поиму только зачем это делать!

Это сообщение отредактировал(а) KuMa1104 - 26.1.2010, 01:13


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
Stratus
Дата 26.1.2010, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 27.5.2009

Репутация: нет
Всего: нет



не совсем то:

Код

    static class Program
    {
        [STAThread]
        static void Main()
        {
            Initialization();
        }

        public static void Initialization()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Form1 FR1 = new Form1(); 
            Application.Run(FR1);
        }
        public static void Test(Form1 f, System.EventArgs e)
        {
            //я хочу здесь обратиться к уже созданному обьекту FR1
        }
    }

PM MAIL   Вверх
KuMa1104
Дата 26.1.2010, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Код

 static class Program
    {
        [STAThread]
        static void Main()
        {
            Initialization();
        }

        static  Form1 FR1;
        public static void Initialization()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            FR1 = new Form1(); 
            Application.Run(FR1);
        }
        public static void Test(Form1 f, System.EventArgs e)
        {
            FR1..........................
        }
    }



--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
Экскалупатор
Дата 26.1.2010, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



Stratus, тут уже были подобные темы. если честно то я не вижу причин что бы делать этот метод в этом классе. обычно в этом классе ничего такого не делают. он выполняет свою функцию(стартует все это дело) и все на этом заканчивается. для чего делать тут этот метод?
PM MAIL ICQ   Вверх
Stratus
Дата 27.1.2010, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 27.5.2009

Репутация: нет
Всего: нет



KuMa1104  спасибо - у меня ума нехватило на такой простои и изящный выход smile

Экскалупатор - я невижу другого оптимального варианта обращаться к обьектам уже созданой формы, поэтому в остальные методы передаю обьект FR, то есть зозданную форму со всеми обьектами.
PM MAIL   Вверх
Экскалупатор
Дата 28.1.2010, 03:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



Stratus, можно сделать класс который будет управлять формой. я бы делал именно так.
PM MAIL ICQ   Вверх
Stratus
Дата 29.1.2010, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 27.5.2009

Репутация: нет
Всего: нет



Цитата(Экскалупатор @ 28.1.2010,  03:08)
Stratus, можно сделать класс который будет управлять формой. я бы делал именно так.

А зачем создавать такой класс? чем он удобней я прям в классе Form1 и прописываю все что касается формы..

Можно примерчик 

PM MAIL   Вверх
Экскалупатор
Дата 30.1.2010, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



Цитата(Stratus @  29.1.2010,  19:58 Найти цитируемый пост)
А зачем создавать такой класс?

во-первых, что бы не городить огород в одном классе. какое отношение имеет класс Program к форме? правильный ответ: никакого.
во-вторых, для того что бы отделить реализацию от отображения.
можно еще почитать про паттерн Посредник (Mediator) - GoF
PM MAIL ICQ   Вверх
Stratus
Дата 2.2.2010, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 27.5.2009

Репутация: нет
Всего: нет



Экскалупатор
а как быть если нужно вызвать экземпляр класса находящийся в классе А в экземпляре класса В

Код

class A
{
     another_class ob1 = new another_class();
     void metodA()
     {
     }
}
class B
{
     void metodB(object ob1)
     {
           ob1.metodA
     }
}


или так:

Код

class A
{
     another_class ob1 = new another_class();
     void metodA()
     {
     }
}
class B
{
     A ob2 = new A();
     void metodB()
     {
           ob2.metodA
     }
}


как лучше?
PM MAIL   Вверх
Экскалупатор
Дата 2.2.2010, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



Stratus, не конкретный вопрос. что такое в первом случае (object ob1)? в общем случае я бы выбрал второй вариант, потому как в таком случае класс А инкапсулирует another_class и позволяет работать с ним через свои методы, облегчая жизнь в дальнейшем в том, что во-первых, класс В не имеет доступа к another_class и соответственно не может его изменять, во-вторых, можно заменить another_class на что то другое, а класс В об этом даже не узнает, соответственно его не придется изменять.

первый вариант похож на вызовы между формами. когда один класс создает другой, передавая ему в качестве параметра ссылку на себя, и второй класс вызывает методы первого класса. получается очень сильная зависимость между этими классами. при использовании того же Mediator, эта проблема убирается, формы вообще друг о друге ничего не знают и никак друг на друга не влияют.

все это конечно ИМХО. и выбор в данном случае, впрочем как и всегда, остается за разработчиком...
PM MAIL ICQ   Вверх
Zakonnic
Дата 2.2.2010, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 25.4.2006

Репутация: 2
Всего: 6



Stratus, перефразируя твой пример:
Код

class Яблоко
{
     КоллекцияКосточек ob1 = new КоллекцияКосточек();
     void СорватьСВетки()
     {
     }
}
class Стол
{
     void ПоложитьНаСтол(object ob1)
     {
           ob1.СорватьСВетки(); 
           // работать это конечно не будет, так как объект не всякого типа можно сорвать с ветки.
           // Нужно привести его к типу Яблоко, проверив перед этим, является ли экземпляр Яблоком:
           // if (ob1 is Яблоко) ((Яблоко)ob1).СорватьСВетки();           
     }
}

Так понятнее?
--------------------
...и никогда не пишите в комментариях правду
PM MAIL ICQ   Вверх
Stratus
Дата 7.2.2010, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 27.5.2009

Репутация: нет
Всего: нет



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

Есть 3 класса:
В 1-ом классе уже есть экземпляр класса 3,
но я планирую использовать этот же экземпляр класса 3 в классе 2 не создавая новый обьект......
PM MAIL   Вверх
uranpro
Дата 7.2.2010, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: 1
Всего: 1



может быть поможет http://gazette.linux.ru.net/lg85/ortiz.html =)


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Экскалупатор
Дата 8.2.2010, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



Цитата(Stratus @  7.2.2010,  21:19 Найти цитируемый пост)
Есть 3 класса:
В 1-ом классе уже есть экземпляр класса 3,
но я планирую использовать этот же экземпляр класса 3 в классе 2 не создавая новый обьект...... 

я ж вроде объяснял уже. нужно сделать отдельный класс который будет содержать в себе экземпляр класса 3, и будет передавать этот экземпляр туда куда тебе нужно, хоть в первый хоть во второй класс. т.е. делаешь класс 4. в нем создаешь экземпляр класса 3, а потом передаешь его в качестве параметра в класс 1 и 2.
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0809 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.