Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Предача обьекта в другой метод


Автор: Stratus 26.1.2010, 00:20
Коллеги,
подскажите плиз как можно передать экземпляр обьекта созданного в одном методе в другой метод того же класса?

Автор: KuMa1104 26.1.2010, 01:11
Бр..... 
Цитата(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);
        }
    }
}

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

Автор: Stratus 26.1.2010, 01:18
не совсем то:

Код

    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
        }
    }

Автор: KuMa1104 26.1.2010, 01:29
Код

 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..........................
        }
    }

Автор: Экскалупатор 26.1.2010, 01:43
Stratus, тут уже были подобные темы. если честно то я не вижу причин что бы делать этот метод в этом классе. обычно в этом классе ничего такого не делают. он выполняет свою функцию(стартует все это дело) и все на этом заканчивается. для чего делать тут этот метод?

Автор: Stratus 27.1.2010, 23:38
KuMa1104  спасибо - у меня ума нехватило на такой простои и изящный выход smile

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

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

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

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

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

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

во-первых, что бы не городить огород в одном классе. какое отношение имеет класс Program к форме? правильный ответ: никакого.
во-вторых, для того что бы отделить реализацию от отображения.
можно еще почитать про паттерн http://www.citforum.ru/SE/project/pattern/p_1.shtml#3.2.7

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

Код

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
     }
}


как лучше?

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

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

все это конечно ИМХО. и выбор в данном случае, впрочем как и всегда, остается за разработчиком...

Автор: Zakonnic 2.2.2010, 13:03
Stratus, перефразируя твой пример:
Код

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

Так понятнее?

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

Есть 3 класса:
В 1-ом классе уже есть экземпляр класса 3,
но я планирую использовать этот же экземпляр класса 3 в классе 2 не создавая новый обьект......

Автор: uranpro 7.2.2010, 22:47
может быть поможет http://gazette.linux.ru.net/lg85/ortiz.html =)

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

я ж вроде объяснял уже. нужно сделать отдельный класс который будет содержать в себе экземпляр класса 3, и будет передавать этот экземпляр туда куда тебе нужно, хоть в первый хоть во второй класс. т.е. делаешь класс 4. в нем создаешь экземпляр класса 3, а потом передаешь его в качестве параметра в класс 1 и 2.

Автор: Stratus 14.2.2010, 00:26
Экскалупатор

как передать класс в качестве параметра в другой класс?

Автор: Экскалупатор 14.2.2010, 02:08
Stratus, точно так же как и любой другой параметр.
Код

class Program
    {
        static void Main(string[] args)
        {
            class4 cl = new class4();
            cl.metodClassa4();
        }
    }
    class class1
    {
        class3 _class3 = null;
        public class1(class3 myClass)
        {
            _class3 = myClass;
        }
        public void metodClassa()
        {
            _class3.metod1();
        }
    }
    class class2
    {
        class3 _class3 = null;
        public class2(class3 myClass)
        {
            _class3 = myClass;
        }
        public void metodClassa()
        {
            _class3.metod1();
        }
    }
    class class3
    {
        public void metod1()
        {
            Console.WriteLine("метод в классе 3");
        }
    }
    class class4
    {
        public void metodClassa4()
        {
            class3 _class3 = new class3();
            class1 _class1 = new class1(_class3);
            _class1.metodClassa();
            class2 _class2 = new class2(_class3);
            _class2.metodClassa();
        }
    }


код конечно х..., но принцип я думаю понятен. просто нету времени придумывать что то более цивильное.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)