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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли наследовать объект? 
:(
    Опции темы
Rohoss
  Дата 4.5.2009, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


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

Репутация: нет
Всего: 18



Скажем так, объект А находится в библиотеке, не известной до момента выполнения приложения. Может ли объект В, быть наследован от объекта А?


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Partizan
Дата 4.5.2009, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



Rohoss, наследуются не объекты, а классы....

по САБЖу, наверно можно поиграться с динамической генерацией классов..


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
-Mikle-
Дата 5.5.2009, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 4
Всего: 59



Да, динамическая генерация, думаю, единственный способ. Просто непонятно Rohoss, каков конечный смысл такой операции? Что даст наследование? Проясни пожалуйста.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
PashaPash
Дата 5.5.2009, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 9
Всего: 49



-Mikle-, можно подсовывать B вместо A, например, в целях тестирования. 
Rohoss, погугли Rhino Mocks или moq.


--------------------
PM MAIL WWW   Вверх
-Mikle-
Дата 5.5.2009, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 4
Всего: 59



Цитата(PashaPash @  5.5.2009,  16:25 Найти цитируемый пост)
-Mikle-, можно подсовывать B вместо A, например, в целях тестирования

Разве это не касается только .NET remoting? Там так можно было делать.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
PashaPash
Дата 5.5.2009, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 9
Всего: 49



-Mikle-, не обязательно remoting - это же обычное наследование. 


--------------------
PM MAIL WWW   Вверх
-Mikle-
Дата 5.5.2009, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 4
Всего: 59



Цитата(PashaPash @  5.5.2009,  23:46 Найти цитируемый пост)
это же обычное наследование

Я так понял, что нужно не обычное:
Цитата(Rohoss @  4.5.2009,  23:15 Найти цитируемый пост)
объект А находится в библиотеке, не известной до момента выполнения приложения. Может ли объект В, быть наследован от объекта А?


Ему нужно наследоваться во время выполнения от А. Причем не ясно зачем такое нужно вообще и каков смысл в классе B, если этот класс заранее не знает, что он будет перегружать или не перегружать.

Remoting позволяет (через ж..у и не документированно естественно) подменить один из базовых типов? например object на MyObject, но это только ради "поиграться", реально я бы не стал этого делать.

Думаю человеку нужно использовать "Композицию" и "Делегирование" (при необходимости) в качестве решения своей задачи.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
PashaPash
Дата 6.5.2009, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 9
Всего: 49



-Mikle-, мало ли какие странные задачи могут придти в голову топикастеру. Навскидку - он может заменить все типы из сборки XXX в IoC-контейнере на такие вот "наследники" и обеспечить логгирование или какой-нибудь exception shielding. Типа - хочу чтобы все исключения, бросаемые классами MyFramework.Data.*... оборачивались в DataLayerException с дампом всех параметров. Причем без изменения кода MyFramework.Data.*. Не совсем наследование, скорее реализация тех же интерфейсов/прокси, но средства для достижения - те же.


--------------------
PM MAIL WWW   Вверх
-Mikle-
Дата 6.5.2009, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 4
Всего: 59



Хорошо, задача имеет определенный смысл, но разве прокси-подобные вещи делаются не путем динамической компиляции? Мне другого и в голову не приходит.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
PashaPash
Дата 6.5.2009, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 9
Всего: 49



-Mikle-, ес-но с помощью динамической компиляции. но это не значит что нужно с нуля писать реализацию smile 



--------------------
PM MAIL WWW   Вверх
-Mikle-
Дата 6.5.2009, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 4
Всего: 59



Ну в общем-то я нигде вроде и не говорил что с нуля.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Rohoss
Дата 10.5.2009, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


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

Репутация: нет
Всего: 18



Цитата(-Mikle- @  5.5.2009,  07:43 Найти цитируемый пост)
Да, динамическая генерация, думаю, единственный способ. Просто непонятно Rohoss, каков конечный смысл такой операции? Что даст наследование?


Ссори за краткое отсутствие…
Данный вопрос интерес чисто теоретически и не имеет никакой практической надобности… smile 




--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
diadiavova
Дата 11.5.2009, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(Rohoss @  10.5.2009,  20:41 Найти цитируемый пост)
Данный вопрос интерес чисто теоретически и не имеет никакой практической надобности

Чисто теоретически, такая возможность есть в некоторых других языках. В частности в javascript предков можно менять динамически, и кстати, там как раз наследуется именно объект и куча других "странностей" присутствует.
Приведу пример
Код

<html>
<head>
    <title>Prototype test</title>
</head>
<body>

    <script type="text/javascript">
        //Первый базовый класс
        function base1() { this.showMessage = function() { alert("I am base1"); } };
        //Второй базовый класс
        function base2() { this.showMessage = function() { alert("I am base2"); } };
        //Класс-потомок
        function child() { };
        //создаём экземпляры базовых классов
        var b1 = new base1();
        var b2 = new base2();
        //Обработчик кликов кнопок
        function btn_click(src)
        {
            //Если нажата первая кнопка назначам для child предка b1(экземпляр base1)
            //в ином случае - b2(экземпляр base2)        
            child.prototype = (src.id == "btn1") ? b1 : b2;
            //Создаём экземпляр класса child
            var test = new child();
            //Вызываем метод базового класса
            test.showMessage();
        }


    </script>

    <input id="btn1" type="button" value="show base1" onclick="btn_click(this);">
    <input id="btn2" type="button" value="show base2" onclick="btn_click(this);">
    <br>
    <span id="result"></span>
</body>
</html>



Здесь у меня два класса - предка(base1 и base2) и один пустой класс-потомок(child). На страничке две кнопки с одним обработчиком. В зависимости от того, какая кнопка нажата, классу child назначается (посредством экземпляров) тот или иной родитель, после чего создаётся экземпляр класса child и у него вызывается метод, определённый в обоих родителях, но по-разному. Результат можно увидеть, если запустить пример.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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