Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.fds-net.ru/showflat.php?Number=4275645&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Tue Apr 12 10:49:33 2016
Кодировка: Windows-1251
[C#] выбор перегруженного метода при передаче базового класса - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
Technical >> Development (Archive)

Страницы: 1
kv_
stranger

Рег.: 08.06.2005
Сообщений: 22
Рейтинг: 0
  [C#] выбор перегруженного метода при передаче базового класса
      16.03.2006 19:39
 

Абстрактный базовый класс БК
Наследники А:БК, Б:БК

Метод ( А параметр )
Метод ( Б параметр )

Как сделать чтобы при вызове Метод ( БК ) вызвывался нужный метод - в зависимости от того, на что БК в данный момент указывает А или Б. Шарп естественно кидает комайлтайм еррор. Но с другой стороны очевидно, что в рантайме это запросто можно выполнить.



Fj_
Carpal Tunnel

Рег.: 12.09.2004
Сообщений: 8795
Рейтинг: 3287
  Re: [C#] выбор перегруженного метода при передаче базового класса [re: kv_]
      16.03.2006 20:44
 

На самом-то деле у тебя все методы выглядят как static Method(BK _this, BK parameter), причем по первому параметру допускается автоматический полиморфизм. Поэтому если у тебя Метод имплементирован только в БК (то есть первый параметр не требует разрешения через полиморфизм), то маза поменять местами параметр и объект-владелец метода, и сделать метод виртуальным. Тогда все прекрасно само отрезолвится.

Если нет, то у тебя получается аж четыре возможных комбинации, что довольно страшно и плохо (особенно если потом еще какие-нибудь потомки появятся - количество имплементаций будет расти геометрически), и нужно пытаться располовинить функциональность того, что происходит в методе Метод на три половины: действия с первым параметром, действия со вторым параметром, и статический метод Метод, который эти действия инициирует и совокупляет.



The data is the error (c)IIS FTP Server.
kv_
stranger

Рег.: 08.06.2005
Сообщений: 22
Рейтинг: 0
  Re: [C#] выбор перегруженного метода при передаче базового класса [re: Fj_]
      17.03.2006 16:56
 

Quote:

автоматический полиморфизм. Поэтому если у тебя Метод имплементирован только в БК (то есть первый параметр не требует разрешения через полиморфизм), то маза поменять местами параметр и объект-владелец метода, и сделать




Я имел ввиду метод другого класса. А вообще делаю что-то типа трансятора одних объектов в другие. Типа есть набор объектов известных всем(критерии фильрации данных при доступе к бд) - им желательно либо интерфейс общий иметь или базовый класс. Есть потребители этих объектов которые в свою очередь хотят в зависимости от собственной реализации их превращать в другой набор объектов (критериев которые они сами понимают).

До первого компайла все получалось замечательно =): были Unary, Binary criterions, Unary, Binaray logical expressions, все это в перспективе должно было рекурсивно оттранслироваться в понятный моему персистеру наборчик.
Но транслятор(класс) в котором определены перегруженные методы translate не понимает когда ему в качестве аргумента подсовывают базовый класс. А жаль

Maiverik

Рег.: 07.09.2004
Сообщений: 22718
Из: Зеленограда
Рейтинг: 6579
  Re: [C#] выбор перегруженного метода при передаче базового класса [re: kv_]
      17.03.2006 18:03
 

А как сделать чтоб метод был Public но не наследовался? Понятно что практического смысла мало, но всетаки?

burivuh
Carpal Tunnel

Рег.: 08.08.2004
Сообщений: 4452
Рейтинг: 1567
  Re: [C#] выбор перегруженного метода при передаче базового класса [re: Maiverik]
      17.03.2006 18:07
 

Это нарушение полиморфизма, поэтому при создании C# Хейлсберг отказался от этой возможности Object Pascal //Krasin



Послушай, иногда мужчинам... нужно уважение иметь лицо (с) Безымянный переводчик
Страницы: 1

Technical >> Development (Archive)

Дополнительная информация
4 зарегистрированных и 1 анонимных пользователей просматривают этот форум.

Модераторы:  DarkGray 

Печать темы

Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в