Обобщения использовать в Интерфейсе
От: AHgpeu Украина  
Дата: 01.07.10 07:09
Оценка:
пытаюсь использовать обобщения в интерфейсе для более абстрактного использования.
public interface IListener<in T> 
    {
        void Execute(int aItemID, T aSettings); // aSettings - заранее неизвестный класс настроек
    }


Класс реализующий интерфейс IListener — ничего не знает о том, в каком виде в метод Execute() будет передана ссылка на aSettings
public class Listener : IListener<> // ???????????? что писать в '<>' - мне пока не понятно
    {
        public void Execute(int aItemID, T aSettings)
        {
            // здесь уже зная aItemID можно понять какой тип aSettings передан и 
            // попытаться привести к этому типу
        }
    }

И еще вопрос, в каком виде дальше по коду использовать тип интерфейса 'IListener'? Например в такой строчке:

public List<IListener<>> Listeners; // ????????????  Снова не понятно что писать в '<>'
Re: Обобщения использовать в Интерфейсе
От: nikov США http://www.linkedin.com/in/nikov
Дата: 01.07.10 07:23
Оценка: 1 (1) +1
Здравствуйте, AHgpeu, Вы писали:

AH>
AH>        public void Execute(int aItemID, T aSettings)
AH>        {
AH>            // здесь уже зная aItemID можно понять какой тип aSettings передан и 
AH>            // попытаться привести к этому типу
AH>        }
AH>


А почему бы тогда не использовать object вместо T?
Re[2]: Обобщения использовать в Интерфейсе
От: shakm Россия  
Дата: 01.07.10 08:10
Оценка:
Здравствуйте, nikov, Вы писали:

N>Здравствуйте, AHgpeu, Вы писали:


AH>>
AH>>        public void Execute(int aItemID, T aSettings)
AH>>        {
AH>>            // здесь уже зная aItemID можно понять какой тип aSettings передан и 
AH>>            // попытаться привести к этому типу
AH>>        }
AH>>


N>А почему бы тогда не использовать object вместо T?


Ты пишешь: ...здесь уже зная aItemID можно понять какой тип...
Т.е., ты все равно будешь ветвление строить, почти ни какой универсальности. У тебя интерфейс будет типизированным и ни какого толка от его использования. Ведь интерфейс по большей части используют для того, чтобы не быть жестко связанными. Надо развязаться. Я бы тебе посоветовал завести базовый тип для aSettings. Тогда независимо от того, какой класс исполняет интерфейс, ты всегда сможешь использовать интерфейс (вызывать его методы), передавая объект базового типа как параметр.
Про то и советует nikov, говоря про тип object, самый базовый перебазовый )))))))))
Re: Обобщения использовать в Интерфейсе
От: shakm Россия  
Дата: 01.07.10 08:24
Оценка:
Наверное ты хочешь иметь интерфейс, который умеет исполнять метод Execute с разными типами, а значит ты мог бы создать класс, реализующий метод Execute интерфейса, который уже сам будет ветвится и искать в фабрике объектов тот, который сможет принять полученный параметр.
В общем, сначала надо спроектировать, а потом придумывать реализацию... Есть всяческие шаблоны для подобных задач )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.