навесить доп. обработку на метод Add в HashSet
От: MadHuman Россия  
Дата: 13.09.11 10:53
Оценка:
Всем привет!
подскажите плиз возможное решение..
задача такая: нужен контейнер типа HashSet. также нужно при добавлении элементов в него выполнять доп. действия, например если элемент не соответствует каким-то условиям — генерить ошибку, а при ещё каких-то делать доп-е действия сбоку.
хочется это инкапсулировать в самом контейнере (чтобы те кто добавляет за это не заморачивались).

как хочется (простое решение) — наследоваться от HashSet и перекрывать метод типа OnAdd, но такого метода (и подобного) нету ((

другой способ который вижу (через ж) — в своём классе контейнере, реализовывать интерфейс ISet и тупо руками в каждом его методе перевызывать соотвествующий метод HashSet-а который живет во внутренней переменной (вроде это называется агрегация)....

неужели токо вторым способом можно решить задачу?...
спасибо!
Re: навесить доп. обработку на метод Add в HashSet
От: -VaS- Россия vaskir.blogspot.com
Дата: 13.09.11 11:09
Оценка: +1
MH>другой способ который вижу (через ж) — в своём классе контейнере, реализовывать интерфейс ISet и тупо руками в каждом его методе перевызывать соотвествующий метод HashSet-а который живет во внутренней переменной (вроде это называется агрегация)....

Это не ж, это паттерн Proxy. В шарпе кроме делегирования вызова каждого метода можно посмотреть в сторону динамических прокси, коих существует несколько.

А вообще ты просишь решить проблему, которой не должно быть — надо смотреть на задачу в целом. Например, действительно ли тебе нужны все 20 методов ISet? Или лучше спрятать технические интерфейсы вроде этого за хорошей доменной моделью? Тогда проблема отпадет сама собой.
Re[2]: навесить доп. обработку на метод Add в HashSet
От: MadHuman Россия  
Дата: 13.09.11 11:21
Оценка:
Здравствуйте, -VaS-, Вы писали:

VS>Это не ж, это паттерн Proxy. В шарпе кроме делегирования вызова каждого метода можно посмотреть в сторону динамических прокси, коих существует несколько.

ок

VS>А вообще ты просишь решить проблему, которой не должно быть — надо смотреть на задачу в целом. Например, действительно ли тебе нужны все 20 методов ISet? Или лучше спрятать технические интерфейсы вроде этого за хорошей доменной моделью? Тогда проблема отпадет сама собой.

да, нужны. если контейнер по сути Set и он будет передаваться всяким другим методам которые ожидают ISet.
Re: навесить доп. обработку на метод Add в HashSet
От: Andrii_Avramenko Украина  
Дата: 13.09.11 17:10
Оценка:
Здравствуйте, MadHuman, Вы писали:

MH>Всем привет!

MH>подскажите плиз возможное решение..
MH>задача такая: нужен контейнер типа HashSet. также нужно при добавлении элементов в него выполнять доп. действия, например если элемент не соответствует каким-то условиям — генерить ошибку, а при ещё каких-то делать доп-е действия сбоку.
MH>хочется это инкапсулировать в самом контейнере (чтобы те кто добавляет за это не заморачивались).

MH>как хочется (простое решение) — наследоваться от HashSet и перекрывать метод типа OnAdd, но такого метода (и подобного) нету ((


А перекрытие метода Add подойдет?

public class MyHashSet<T> : HashSet<T>
    {
        public new bool Add(T item)
        {
            Console.WriteLine("MyhashSet");
            return base.Add(item);
        }
    }
Re[2]: навесить доп. обработку на метод Add в HashSet
От: pr0ff  
Дата: 13.09.11 20:37
Оценка:
Здравствуйте, Andrii_Avramenko, Вы писали:
A_A>А перекрытие метода Add подойдет?
методы принимающие HashSet<T> будут вызывать метод Add из HashSet
... << RSDN@Home 1.2.0 alpha 5 rev. 1536>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.