singlepost

Делегаты в С# << На главную или назад  

Вопрос такой: Есть класс А он пораждает дочерний класс В, так вот? как из класса В вызвать метод класса А. Знаю, что через делегаты; прочитал много статей и примеров кода… Не помогло. Кто подскажет?

32 ответов в теме “Делегаты в С#”

  1. 16
    Катерина Ткаченко ответил:

    Разработчик .NET Windows приложений
    Уважаемые коллеги!
    В группе компаний СТЭП (Санкт-Петербург), открыта вакансия «Разработчик .NET Windows приложений».
    Функции:
    разработка программных модулей .NET по готовому ТЗ для Корпоративной Информационной Системы (КИС) в среде Microsoft Visual Studio 2005 на языке программирования C#
    Требования:
    - 25-35 лет
    - образование высшее техническое
    - опыт работы 2 года
    - английский технический желателен
    - уверенное знание платформы .NET, языка программирования C#, ООП.
    - опыт разработки в среде Microsoft Visual Studio 2005
    - опыт и понимание Web технологий: Web Services (XML, SOAP, HTTP/HTTPS)
    - опыт использования систем коллективной разработки
    Условия:
    - офисная работа
    - з/п 40 – 50 тс. р.
    - оформление по ТК
    Если Вас заинтересовало наше предложение, звоните по тел. (812)633-3556, Катерина.

  2. 15
    Евгений Паньков ответил:

    Блин, только допер, чего надо было (:

    class clsA {

    void method(){

    }

    void XXX(){
    clsB b; //порождается B
    b=new clsB(this);
    …….
    }

    }

    class clsB {
    private clsA parent;//ссылка на родителя

    public clsB(clsA owner){
    parent=owner;
    }

    public void YYY() {
    parent.method(); //вот
    }

    }

  3. 14
    Иван Августон ответил:

    #12 и#13 спасибо буду пробовать)

  4. 13
    Борис Глебов ответил:

    Иван Августон

    "класс В не наследник класса А и даже если он будет наследником, то та реализация которую ты предлагаешь все равно не катит."

    Куда не катит? :) )

  5. 12
    Алексей Дарий ответил:

    delegate void MethodDelegate();

    class B
    {
    public void Execute(MethodDelegate method){ method.Invoke(); }
    }

    class A
    {
    B _b = new B();

    public void Method() { Console.WriteLine("Executed: a.method()"); }

    public void Execute() { _b.Execute(this.Method); }
    }

    class Program
    {
    static void Main(string[] args)
    {
    A a = new A();
    a.Execute();
    Console.ReadKey();
    }
    }

  6. 11
    Алексей Голубев ответил:

    Вот так это можно сделать через событие

    class A
    {
    Newclass B = new Newclass()
    B.OnDoMethod += new DMethod(method);

    public void metod()
    {……….}

    }

    class B
    {
    public delegate void DMethod();
    public event DMethod OnDoMethod;

    private void Do()
    {
    if (OnDoMethod != null)
    OnDoMethod();
    }

    }

    Можно обойтись без события, но делегат все равно нужно куда-нить передавать в B.
    Еще один вариант сделать у класса B свойство типа {public A parent;}, инициировать его и работать напрямую с ссылкой на класс A.

  7. 10
    Евгений Паньков ответил:

    class A
    {

    public void metod()
    {……….}

    }

    class B : A //наследование
    {
    //ля ля ля
    //хочу вызвать метод metod() из класса А
    method();//или base.method(); или this.method(); (:
    }

  8. 9
    Павел Пересторонин ответил:

    А разве c# дает вызывать нестатический метод класса без экземпляра класса?

  9. 8
    Алексей Близнюк ответил:

    base.method

  10. 7
    Алексей Бобьяков ответил:

    А для чего это нужно?..

  11. 6
    Олег Андреев ответил:

    Я про не-static метод.

  12. 5
    Павел Пересторонин ответил:

    Нет, A.metod()

  13. 4
    Олег Андреев ответил:

    Си# не знаю, но может быть A::method()

  14. 3
    Иван Августон ответил:

    вот пример кода:

    class A
    {
    Newclass B = new Newclass()

    public void metod()
    {……….}

    }

    class B
    {
    ля ля ля
    хочу вызвать метод metod() из класса А
    }

    класс В не наследник класса А и даже если он будет наследником, то та реализация которую ты предлагаешь все равно не катит.

  15. 2
    Павел Пересторонин ответил:

    Если metod() объявлен как static, то A.metod()
    Иначе, через экземпляр класса A

  16. 1
    Борис Глебов ответил:

    Если класс B унаследован от А, то достаточно будет нужные методы класса А обьявить как protected для использования внутри класса B, либо public если нужно обращаться к ним через экземпляры класса B.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.