Rambler's Top100
Главная
Новости
Статьи
Форумы
Книги
Коды
Сообщество
Блоги
О нас
 

Логин

Email:
  Пароль:

Войти
Зарегистрироваться
Забыл пароль

Поиск

 Искать :
 
Вперед

Сообщение

Аноним


Аноним

Зарегистрирован:
18 February 2005
Сообщения: 13860
Примеры кода: 0
 

Re[4]: Как бороть отсутствие variance для генериков?

02 February 2007 18:38  


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

_FR>Но я так и не понял, чем не устраивает первый вариант
_FR>
_FR>public IThese<T> AsBase { get { return this; }}
_FR>
_FR> :???:
_FR>И как и для чего собирается использоваться IThese<IThis>? Имхо, действительно, надо написать интерфейс IThisThese… (нахвание сам уж придумайУлыбка ) и наследовать его в IThese<T>, например.

Проблема решена, но не элегантно :-\
А смысл был в следующем:


interface IThis {}
interface IThis2 : IThis {}
interface IThis3 : IThis2 {}
// и т.п.

// IThese<> - интерфейс контейнера, содержащего объекты, реализующие IThis и его наследников
interface IThese<T> where T : IThis
{
// ...

// создает строго типизированное представление на основе собственных данных
ITheseView<T> CreateView();

// создает не столь строго типизированноеУлыбка представление на основе указанных источников данных
ITheseView<IThis> CreateView(ICriteria<T> criteria, params IThese<IThis> sources);

// ...
}

interface ITheseView<T> : IThese<T> where T : IThis
{
// ...

ICriteria<T> Criteria { get; }

// ...
}

Вот и хотелось бы, чтобы класс, реализующий IThese<T>, легко и непринужденно реализовывал IThese<IThis>. Но из-за отсутствия ковариантности генериков, приходится городить дополнительные строчки просто для приведения типа T, возвращаемого методами и свойствами этого класса к IThis (а есть еще такие вещи, как IEnumerable<T>, IComparable<T> where T : IThis и т.п., реализуемые или возвращаемые этим же классом), либо вводить негенерик интерфейсы IThese и ITheseView (как я уже писал, как это делает тот же List<T>), и снова их отдельно реализовывать. Ото таке.

Спасибо за участие в обсуждении, вопрос я для себя закрыл.

Данное сообщение получено с сайта RSDN
Наверх
  



Общие вопросы программирования на ASP.NET

 Как бороть отсутствие variance для генериков?Аноним  31 January 2007 17:40
 Re: Как бороть отсутствие variance для генериков?_FRED_  01 February 2007 00:14
 Re[2]: Как бороть отсутствие variance для генериков?Аноним  01 February 2007 11:39
 Re[3]: Как бороть отсутствие variance для генериков?_FRED_  02 February 2007 16:09
 Re[4]: Как бороть отсутствие variance для генериков?Аноним  02 February 2007 18:38
 Re[2]: Как бороть отсутствие variance для генериков?Mab  01 February 2007 00:36
 
Наш Киев

Apartments for Rent

Rambler's Top100
Рейтинг@Mail.ru
Идея: Dimon aka Manowar Программирование: Dimon aka Manowar Дизайн: Dan Lebedev
Хостинг от компании Parking.ru
Карта сайта