roboforum.ru

Технический форум по робототехнике.
Текущее время: 28 ноя 2024, 12:03

Часовой пояс: UTC + 4 часа


Правила форума


В данном разделе каждый может иметь не более одной темы. Тема должна начинаться с логина (ника) робофорума.



Начать новую тему Ответить на тему  [ Сообщений: 913 ]  На страницу Пред.  1 ... 16, 17, 18, 19, 20, 21, 22 ... 61  След.
Автор Сообщение
 Заголовок сообщения: Re: Angel71, флудилка
СообщениеДобавлено: 27 май 2010, 19:04 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Angel71 писал(а):
хех, проблемка нарисовалась. есть базовый класс, в котором есть некая переменная (вполне возможно, что не переменная, а свойство со своими get/set). в классе наследнике нужно реализовать отслеживание изменения переменной. :sorry: немогу вспомнить как такое реализуется и возможно ли вообще.

Как тупой универсальный вариант - реализовать подписку на изменения :)

Добавлено спустя 35 секунд:
Хоть откуда будешь знать об изменениях. Для защиты можно функции подписки сделать доступными только наследникам.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Angel71, флудилка
СообщениеДобавлено: 27 май 2010, 19:07 
Не в сети
Аватара пользователя

Зарегистрирован: 08 фев 2009, 10:13
Сообщения: 700
Откуда: Воротынск
прог. языки: C,C++,C#,Java
ФИО: Дмитрий
Самый простой вариант - переменная private, все действия над ней через соответствующие методы, которые и уведомят кого надо.

_________________
Язык Ада - официально был признан министерством обороны США для создания ПО военной техники


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Angel71, флудилка
СообщениеДобавлено: 27 май 2010, 19:11 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
D1mcon, не очень понял как мне события помогут, если в базовом классе их не будут вызывать. по сути я сейчас как раз и реализую события, оповещающие, что переменная изменилась.

Добавлено спустя 2 минуты 26 секунд:
=DeaD=, яб с удовольствием подписалсяб на получение уведомлений об изменениях, но в базовом классе уведомления не рассылаются.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Angel71, флудилка
СообщениеДобавлено: 27 май 2010, 19:11 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
А что насчет подписки? :)

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Angel71, флудилка
СообщениеДобавлено: 27 май 2010, 19:15 
Не в сети
Аватара пользователя

Зарегистрирован: 08 фев 2009, 10:13
Сообщения: 700
Откуда: Воротынск
прог. языки: C,C++,C#,Java
ФИО: Дмитрий
2Angel71 Кто-то вызывает метод для работы с этой переменной, а сам метод генерит событие соответствующее действию над переменной.
2=DeaD= не понял проблемы подписки. :unknown:

Можно и без событий через шаблоны. Шаблон "наблюдатель" используют обычно при работе с UI но, по-моему, он и здесь поможет.


Плохой вариант - проверка переменной по таймеру.

_________________
Язык Ада - официально был признан министерством обороны США для создания ПО военной техники


Последний раз редактировалось D1mcon 27 май 2010, 19:17, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Angel71, флудилка
СообщениеДобавлено: 27 май 2010, 19:17 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
:oops: для подписки вроде как нужны события, а у меня в наличии только DataReceived, Disposed, ErrorReceived и PinChanged. или я не очень понял о чём речь или может не владею знанием нужных фенечек

Добавлено спустя 48 секунд:
D1mcon, да и эти кто-то сидят в базовом классе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Angel71, флудилка
СообщениеДобавлено: 27 май 2010, 19:21 
Не в сети
Аватара пользователя

Зарегистрирован: 08 фев 2009, 10:13
Сообщения: 700
Откуда: Воротынск
прог. языки: C,C++,C#,Java
ФИО: Дмитрий
Кажись догнал :) - мы не можем модифицировать базовый класс?

_________________
Язык Ада - официально был признан министерством обороны США для создания ПО военной техники


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Angel71, флудилка
СообщениеДобавлено: 27 май 2010, 19:24 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Angel71 писал(а):
:oops: для подписки вроде как нужны события

Ну так сделай механизм :)
Банальная функция регистрирующая в классе указатели на функции которые надо вызвать при изменении переменной.
Как только переменная поменялась - бежим по массиву указателей и дергаем за хвост всех кто просил.

Курить мануалы про вызов функции по указателю и передаче указателя на функцию в другую функцию для регистрации его там.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Angel71, флудилка
СообщениеДобавлено: 27 май 2010, 19:32 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
пока реализовано примерно так. Class1 это для примера, вообще тот класс это в стандартных библиотеках
Код:
    public class Class1
    {
        private bool _b = false;
        public bool b
        {
            get { return _b; }
            set { _b = value; }
        }
        public void Open()
        {
            b = true;
        }
        public void Close()
        {
            b = false;
        }
        ...
        в любой момент где-то может быть вот такое присваивание
        b=false;
        ...
    }

наследую примерно так
Код:
    public class Class2 : Class1
    {
        new public bool b
        {
            get { return base.b; }
            set
            {
                base.b = value;
                NotifyPropertyChanged("b");//генерируем уведомление об изменении
            }
        }

        public void Open()
        {
            b = true;
        }
        public void Close()
        {
            b = false;
        }
    }


Последний раз редактировалось Angel71 27 май 2010, 19:36, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Angel71, флудилка
СообщениеДобавлено: 27 май 2010, 19:35 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Ну это надо переопределять функцию set каждый раз при наследовании. Можно конечно и так. Но тогда о чем мы говорим про родительский класс? :)

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Angel71, флудилка
СообщениеДобавлено: 27 май 2010, 19:38 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
про родительский класс это к тому, что я понятия не имею где нужная переменная может меняться. вопрос в том как отследить и возможно ли это вообще


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Angel71, флудилка
СообщениеДобавлено: 27 май 2010, 19:41 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Angel71 писал(а):
про родительский класс это к тому, что я понятия не имею где нужная переменная может меняться. вопрос в том как отследить и возможно ли это вообще

Самый простой способ - закрыть переменную от наследников и дать им методы set,get,subscribe,unsubscribe и всё.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Angel71, флудилка
СообщениеДобавлено: 27 май 2010, 19:45 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
нет у меня доступа к коду базового класса, ничего я закрыть не могу и подписаться или отписаться на события не могу, в том то и кака. :sorry: либо я уже торможу
одно из полурешений было таким
Код:
        private bool _last_b = false;
        new public bool b
        {
            get
            {
                if(_last_b!= base.b)
                {
                    _last_b = base.b;
                    NotifyPropertyChanged("b");//создаём уведомление об изменении
                }
                return base.b;
            }
            set
            {
                base.b = value;
                NotifyPropertyChanged("b");//создаём уведомление об изменении
            }
        }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Angel71, флудилка
СообщениеДобавлено: 27 май 2010, 19:48 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
ну тогда переопредели метод set и сделай в нём вызов метода, который подергать надо.

Добавлено спустя 1 минуту 28 секунд:
Я не понимаю в чем проблема вообще - родительский класс охамел и меняет свою пропертю не через set?

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Angel71, флудилка
СообщениеДобавлено: 27 май 2010, 19:53 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
так вот же, делал
Код:
    public class Class2 : Class1
    {
        new public bool b
        {
            get { return base.b; }
            set
            {
                base.b = value;
                NotifyPropertyChanged("b");//генерируем уведомление об изменении
            }
        }
     ...
    }

но этож будет работать только, если вызываются переопределённые методы. код в базовом классе их не вызовет

Добавлено спустя 2 минуты 1 секунду:
да не. родительский класс явно всё нормульно делает, базовый класс мелкософтский.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 913 ]  На страницу Пред.  1 ... 16, 17, 18, 19, 20, 21, 22 ... 61  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO