Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заглушка для метода базового класса 
V
    Опции темы
Gluttton
Дата 21.8.2010, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 2
Всего: 54



Доброго времени суток!

Есть базовый класс - MembershipProvider.
Необходимо наследовать от него собственный класс - MyMembershipProvider.
При этом необходимости в реализации всех методов (и свойств) базового класса нет.
Например нет необходимости в реализации таки методов как:
- public override MembershipUserCollection FindUsersByName (string nameToMatch, int pageIndex, int pageSize, out int totalRecords);
- public override void UpdateUser (MembershipUser user);
- и т.д.

Как сделать заглушку на такие методы?

Наверное можно так:
Код

        public override MembershipUserCollection FindUsersByName (string nameToMatch, 
                                                                 int pageIndex, int pageSize, 
                                                                 out int totalRecords)
        {
            totalRecords = 0;
            return new MembershipUserCollection ();
        }

И так:
Код

        public override void UpdateUser (MembershipUser user)
        {
        }


Или правильнее будет так:
Код

        public override MembershipUserCollection FindUsersByEmail (string emailToMatch, 
                                                                  int pageIndex, int pageSize, 
                                                                  out int totalRecords)
        {
            throw new NotImplementedException ();
        }

И так:
Код

        public override void UpdateUser (MembershipUser user)
        {
            throw new NotImplementedException ();
        }





--------------------
Слава Україні!
PM MAIL   Вверх
ДобренькийПапаша
Дата 22.8.2010, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: 3
Всего: 7



Если вам не нужно наследовать эти два метода, то пометьте их в базовом классе как sealed.


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Gluttton
Дата 22.8.2010, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 2
Всего: 54



ДобренькийПапаша, дело в том, что MembershipProvider - стандартный класс (System.Web.Security) и я работаю не с исходным кодом, а с *.dll.


--------------------
Слава Україні!
PM MAIL   Вверх
ДобренькийПапаша
Дата 22.8.2010, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: 3
Всего: 7



Чтобы оставить реализацию базового класса, напишите внутри метода:
Код

base.UpdateUser(user);



--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Gluttton
Дата 22.8.2010, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 2
Всего: 54



Цитата(ДобренькийПапаша @  22.8.2010,  09:36 Найти цитируемый пост)
base.UpdateUser(user);

ДобренькийПапаша, такой вариант не пройдет, т.к. выяснилось, что методы базового класса являются абстрактными smile .




--------------------
Слава Україні!
PM MAIL   Вверх
ДобренькийПапаша
Дата 22.8.2010, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: 3
Всего: 7



аааа....
Ну тогда вы их ОБЯЗАНЫ реализовать)))
Реализуйте по своему усмотрению, но только эксепшен не кидайте. За что вы так пользователя наказать хотите?)))
Может быть есть смысл сказать пользователю мол, "этот метод не работает!".

НО, у меня такое ощущение, что вы приняли неверное решение наследоваться от этого класса. Скорее всего, это неверное проектировочное решение, ибо если разработчик базового класса пометил методы как абстрактные, то он имел ввиду, что наследник будет ОБЯЗАН дать реализацию этого метода...

То как вы переопределили, то есть, ничего, по сути, не делаете в этих методах подойдёт в качестве заглушки, но, повторюсь, я думаю, что в проектировании у вас ошибка.

Это сообщение отредактировал(а) ДобренькийПапаша - 22.8.2010, 10:46


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Gluttton
Дата 22.8.2010, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 2
Всего: 54



Цитата(ДобренькийПапаша @  22.8.2010,  10:44 Найти цитируемый пост)
Ну тогда вы их ОБЯЗАНЫ реализовать)))

Да я уже это понял smile .
Цитата(ДобренькийПапаша @  22.8.2010,  10:44 Найти цитируемый пост)
но только эксепшен не кидайте. За что вы так пользователя наказать хотите?)))

Я просто прочитал, что это специальное исключение, как раз для тех случаев, когда нужно явно сказать, что метод не реализован.

Цитата(ДобренькийПапаша @  22.8.2010,  10:44 Найти цитируемый пост)
НО, у меня такое ощущение, что вы приняли неверное решение наследоваться от этого класса.

Это необходимо для того, что бы "натянуть" аутентификацию на БД не стандартной структуры и этот способ описан в MSDN.

Цитата(ДобренькийПапаша @  22.8.2010,  10:44 Найти цитируемый пост)
То как вы переопределили, то есть, ничего, по сути, не делаете в этих методах подойдёт в качестве заглушки, но, повторюсь, я думаю, что в проектировании у вас ошибка.

Пожалуй, прийдется на этом способе и остановиться.
Спасибо за советы!


--------------------
Слава Україні!
PM MAIL   Вверх
gambit
Дата 22.8.2010, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



Цитата(Gluttton @  22.8.2010,  12:58 Найти цитируемый пост)
Я просто прочитал, что это специальное исключение, как раз для тех случаев, когда нужно явно сказать, что метод не реализован.

да, но мне кажется, что применяется он в основном студией, для того что бы, вы не забыли реализовать метод, ибо мимо него не пройдете)) приложение упадет.

если бы передо мной стола ваша задача, то я бы сделал
Код

public override void UpdateUser (MembershipUser user)
        {
        }

public override что-то UpdateUser (MembershipUser user)
        {
//далее в зависимости от задачи
return null;
//или
return new что-то();
        }


PM MAIL ICQ Skype   Вверх
Gluttton
Дата 22.8.2010, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 2
Всего: 54



gambit,
Код

public override void UpdateUser (MembershipUser user)
        {
        }

Ну тут, как бы все понятно.

А вот здесь:
Код

public override что-то UpdateUser (MembershipUser user)
        {
//далее в зависимости от задачи
return null;
//или
return new что-то();
        }

я сначала везде забил null, но gendarme (утилита для анализа кода) мне сказал, что null возвращать не солидно и подсказал возвращать вновь созданый объект.

Цитата(gambit @  22.8.2010,  18:50 Найти цитируемый пост)
да, но мне кажется, что применяется он в основном студией, для того что бы, вы не забыли реализовать метод, ибо мимо него не пройдете)) 

А я то думаю, почему gendarme мне на них отругался с высокой степенью важности.

Я очень рад - получается я сделал правильно (росту над собой smile ).
Спасибо за советы, тема закрыта!


--------------------
Слава Україні!
PM MAIL   Вверх
gambit
Дата 22.8.2010, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



Цитата(Gluttton @  22.8.2010,  19:48 Найти цитируемый пост)
 null возвращать не солидно 

в принципе согласен. Это сделано для того, кто ждет объект далее. Если мы будем с ним работать, то упадем так как ожидается объект, а мы получили null, вариант, только заворачивая каждый кусок в проверку на null, что не является красивостью. Но задачи бывают всякие, и не стоит полагаться на анализаторы кода, как на панацею от всех проблем.
PM MAIL ICQ Skype   Вверх
mrbrooks
Дата 23.8.2010, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 17
Всего: 306



Цитата(Gluttton @  22.8.2010,  20:48 Найти цитируемый пост)
я сначала везде забил null, но gendarme (утилита для анализа кода) мне сказал, что null возвращать не солидно и подсказал возвращать вновь созданый объект.

аналогичное вещает старина Рихтер.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1123 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.