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
|
Послушай, иногда мужчинам... нужно уважение иметь лицо (с) Безымянный переводчик |
|