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

Логин

Email:
  Пароль:

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

Поиск

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

Сообщение

Аноним


Аноним

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

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

31 January 2007 17:40  


Камрады, кто что думает о такой ситуации:

Есть интерфейсы:

interface IThis {}

interface IThis2 : IThis {}

interface IThis3 : IThis2 {} // ну и т.д.

interface IThese<T> where T : IThis
{
// ...
IThese<IThis> AsBase { get; }
// ...
}

Хочется иметь класс, реализующий IThese<T>, типа такого:


class These<T> : IThese<T> where T : IThis
{
// ...
public IThese<IThis> AsBase { get { return this; }}
// ...
}

Получаем ошибку при компиляции, причем заботливо подсказывается, что де "An explicit conversion exists (are you missing a cast?)". Ежели применить это самое "explicit conversion" и записать свойство These<T>.AsBase так


public IThese<IThis> AsBase { get { return (IThese<IThis>) this; } }

то получим InvalidCastException в рантайме:

Unable to cast object of type 'These`1[...+IThis3]' to type 'IThese`1[...+IThis]'
Если же записать

class These<T> : IThese<T>, IThese<IThis> where T : IThis

то совершенно справедливо получим по рукам от компилятора за то, что
... cannot implement both '... .These<T>' and '... .IThese<... .IThis>' because they may unify for some type parameter substitutions
Городить отдельную реализацию интерфейса IThese<IThis>, которая особо ничем не отличается от IThese<T> where T : IThis? Определить негенерик-интерфейс типа IThese, фактически, копию IThese<T>, и реализовывать в классе These этот интерфейс? Что будет идеологически более правильно? (в MSDN просьба не посылать, там был, соответствующую статью на эту тему читал, но в реальном случае писать "враппер" как-то того... некрасиво, ибо IThese<T> может содержать много методов и свойств) :xz:

Спасибо за внимание.

Данное сообщение получено с сайта 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
Карта сайта