|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
Есть Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
и менеджер Код: c# 1. 2.
А хочется Код: c# 1. 2. 3.
, но так нельзя. Как вывернуться? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 12:19 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
через интерфейсы не предлагать, я и сам так могу. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 12:19 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
Proga, что именно нельзя? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 15:32 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
Можно так: 1) public class ListModelItemsManager<T, U> where T : ListRecordItem<U>, IDataSourceHelper, new() 2) ListRecordItem<T> должен наследовать ListRecordItem<ListRecordItem<T>> ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 15:38 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
Изивиняюсь, второй вариант не подходит ) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 15:40 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
2й исправленный: public class MyListRecordItem<T> : ListRecordItem<MyListRecordItem<T>> - вот такой тип можно будет подставить в генерик ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 15:41 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
Lelouch, предложенные варианты приводят к ошибке. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 16:44 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
Proga, Мой хрустальный шар пока еще не доставили, поэтому напишите, к каким ошибкам то? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 16:46 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
вот так можно: public class ListModelItemsManager<T, U> where T : ListRecordItem<U>, IDataSourceHelper, new() where U : EntityObject, new() ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 16:49 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
Lelouchвот так можно: public class ListModelItemsManager<T, U> where T : ListRecordItem<U>, IDataSourceHelper, new() where U : EntityObject, new() допустим, а как тогда ты предлагаешь объявлять ListModelItemsManager, допустим есть Код: c# 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 16:54 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
Lelouch, В с такой реализацией Код: c# 1. 2.
объявлял вот так Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 16:56 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
ProgaLelouch, В с такой реализацией Код: c# 1. 2. 3.
объявлял вот так Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 16:57 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
Lelouchвот так можно: public class ListModelItemsManager<T, U> where T : ListRecordItem<U>, IDataSourceHelper, new() where U : EntityObject, new() с такой реализацией ругается на невозможность приведения типов ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 16:58 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
Proga, если я правильно понял ваш сбивчивый вопрос, то: readonly ListModelItemsManager<BankRegistration, v_Template_Order> ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 16:59 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
Proga, с такой реализацией ругается на невозможность приведения типов - что именно ругается?) какие типы указаны в параметрах?) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 17:00 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
LelouchProga, если я правильно понял ваш сбивчивый вопрос, то: readonly ListModelItemsManager<BankRegistration, v_Template_Order> сорри не оттуда вытащил блок кода, там у меня много наследников. а мне не хочется вытаскивать наружу объект Entity, на базе которого сформирован класс BankRegistration ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 17:03 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
Proga, ну тогда ваш путь - public class ListModelItemsManager<T> where T : GridIBindingListRecordPrototype, IDataSourceHelper, new() :) Для вашего ограничения where T : ListRecordItem<T>, IDataSourceHelper, new() нужно, чтобы T также отвечал ограничению: where T : EntityObject, new(), что, соответственно, требует множественного наследования. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 17:05 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
LelouchProga, если я правильно понял ваш сбивчивый вопрос, то: readonly ListModelItemsManager<BankRegistration, v_Template_Order> да, такая реализация проходит, но ведь сам BankRegistration знает, о том что он Код: c# 1.
изначально то хочется чтобы было вот так Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 17:08 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
LelouchProga, ну тогда ваш путь - public class ListModelItemsManager<T> where T : GridIBindingListRecordPrototype, IDataSourceHelper, new() :) Для вашего ограничения where T : ListRecordItem<T>, IDataSourceHelper, new() нужно, чтобы T также отвечал ограничению: where T : EntityObject, new(), что, соответственно, требует множественного наследования. я так и думал, привык что в плюсах так можно было делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 17:09 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
LelouchProga, ну тогда ваш путь - public class ListModelItemsManager<T> where T : GridIBindingListRecordPrototype, IDataSourceHelper, new() :) Для вашего ограничения where T : ListRecordItem<T>, IDataSourceHelper, new() нужно, чтобы T также отвечал ограничению: where T : EntityObject, new(), что, соответственно, требует множественного наследования. в этом получаю большую проблему. потому как хотелось вызывать методы именно класса T в ListModelItemsManager без приведения типа, да и то, вряд ли получиться. Придётся через интерфейсы видимо копать ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 17:12 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
ProgaLelouchProga, ну тогда ваш путь - public class ListModelItemsManager<T> where T : GridIBindingListRecordPrototype, IDataSourceHelper, new() :) Для вашего ограничения where T : ListRecordItem<T>, IDataSourceHelper, new() нужно, чтобы T также отвечал ограничению: where T : EntityObject, new(), что, соответственно, требует множественного наследования. в этом получаю большую проблему. потому как хотелось вызывать методы именно класса T в ListModelItemsManager без приведения типа, да и то, вряд ли получиться. Придётся через интерфейсы видимо копать хотя есть ещё решения, но они менее элегантные. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 17:13 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
ProgaProgaпропущено... в этом получаю большую проблему. потому как хотелось вызывать методы именно класса T в ListModelItemsManager без приведения типа, да и то, вряд ли получиться. Придётся через интерфейсы видимо копать хотя есть ещё решение, но они менее элегантные. для людей, кто в последствие будет интересоваться, это решение через объявление в конструкторе в качестве параметра типа объекта. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 17:16 |
|
Шаблоны как параметры шаблона
|
|||
---|---|---|---|
#18+
Proga, ну если не ставить во главу угла сокрытие типа сущности, то можно описать ListModelItemsManager как Код: c# 1.
и, например, воспользоваться IoC контейнером: Код: c# 1. 2. 3. 4. 5.
Методы ListModelItemsManager<TEntity>, возвращающие и принимающие тип T должны изменить его на ListModelItemsManager<TEntity> P.S. Если внутри ListModelItemsManager в создании новых объектов нет нужды, то IoC контейнер не нужен. P.P.S. Второй способ избежать его использования: сделать ListModelItemsManager абстрактным и добавить в него метод: abstract ListRecordItem<TEntity> CreateNewItem() (соответствующим образом переопределяя его в потомках) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2014, 17:23 |
|
|
start [/forum/topic.php?fid=20&msg=38663949&tid=1402840]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 168ms |
0 / 0 |