![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Bogdan1024 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1436 Регистрация: 28.9.2005 Где: Киев Репутация: 5 Всего: 13 |
Есть класс, унаследованный от List<SomeObject>. Как в нём реализовать метод .Add так, чтобы никаким образом нельзя было вызывать родной метод List<>.Add? Нужно чтобы все объекты SomeObject в списке были с уникальным полем Name.
-------------------- ![]() |
|||
|
||||
QryStaL |
|
|||
![]() Intellectual feast ![]() ![]() Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: 14 Всего: 32 |
Наследованием не получится, так как public void Add(T item) {} невиртуальный. Можно List обернуть в свой класс и там реализовывать...
-------------------- I don't need a reason being who I am... |
|||
|
||||
Bogdan1024 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1436 Регистрация: 28.9.2005 Где: Киев Репутация: 5 Всего: 13 |
Да, на самом деле не круто скрывать родной .Add. Какой же это наследник List<SomeObject>, если он не является полнофункциональным List<SomeObject>.
Быть может можно запретить каст от Класса-наследника к List<SomeObject>? Кидать эксцепшн при касте, например? -------------------- ![]() |
|||
|
||||
Bogdan1024 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1436 Регистрация: 28.9.2005 Где: Киев Репутация: 5 Всего: 13 |
Не, переопределить каст нельзя. Ладно, прийдётся переделать класс.
-------------------- ![]() |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Можно отнаследоваться и сделать метод public new Add с такими же аргументами как в методе который хотим скрыть. И уже в этом переопределённом методе кидать исключение. Хотя это не избавит от того что юзер может привести к IList<T> и дёргать Add через интерфейс
![]() Конечно, лучше будет создать обёртку - свой класс наследующий интерфейс IList<T>, содержащий поле типа List<T> и все методы кроме Add перенаправляющий в List. А метод Add реализовать явно (не public а private IList<T>.Add), тогда его просто не будет видно. В остальном это получится 100% тот же класс-список, к тому же не так уж и много методов в IList. -------------------- ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |