Здравствуйте, s.ts, Вы писали:
S>> А чем тебе Дельфевая реализация не нравится???? S>> Перпективы в ненужности использования рефлексии и простота использования наследников типов.
ST>нужна реализация для мэйнстрима (си шарп)
ST>да и как я смогу использовать это в других языках ?
кстати, создаваемые в дельфи @MetaИмя_класса — они являются потомками одного класса ?
Здравствуйте, s.ts, Вы писали:
ST>Здравствуйте, s.ts, Вы писали:
S>>> А чем тебе Дельфевая реализация не нравится???? S>>> Перпективы в ненужности использования рефлексии и простота использования наследников типов.
ST>>нужна реализация для мэйнстрима (си шарп)
ST>>да и как я смогу использовать это в других языках ?
ST>кстати, создаваемые в дельфи @MetaИмя_класса — они являются потомками одного класса ?
Да от @Tclass. Но когда ты создаешь
VirtClass= class of BaseVirtClass;
Все вызовы Finction(VC:VirtClsass):Object;
трансформируются к
Finction(@MetaMyVirtClass.Instanse as BaseVirtClass)
Этим и достигается "статическая" виртуальность
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, s.ts, Вы писали:
ST>нужна реализация для мэйнстрима (си шарп)
Ну это будущее покажет C# стандартизован и ограничен в возможностях.
MSDN Ресеч хочет рассширить возможности. В Delphi руки развязаны. ST>да и как я смогу использовать это в других языках ?
Если классы создавать в Delphi то доступ
через @MetaClassName.@Instanse доступно на любом языке.
Либо ручками делать метаклассы.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S>Здравствуйте, s.ts, Вы писали:
ST>>нужна реализация для мэйнстрима (си шарп) S> Ну это будущее покажет C# стандартизован и ограничен в возможностях. S>MSDN Ресеч хочет рассширить возможности. В Delphi руки развязаны. ST>>да и как я смогу использовать это в других языках ? S> Если классы создавать в Delphi то доступ S>через @MetaClassName.@Instanse доступно на любом языке. S>Либо ручками делать метаклассы.
а во всех языках идентификатор может начинаться с @ ?
Здравствуйте, s.ts, Вы писали:
ST>Здравствуйте, Serginio1, Вы писали:
S>>Здравствуйте, s.ts, Вы писали:
ST>>>нужна реализация для мэйнстрима (си шарп) S>> Ну это будущее покажет C# стандартизован и ограничен в возможностях. S>>MSDN Ресеч хочет рассширить возможности. В Delphi руки развязаны. ST>>>да и как я смогу использовать это в других языках ? S>> Если классы создавать в Delphi то доступ S>>через @MetaClassName.@Instanse доступно на любом языке. S>>Либо ручками делать метаклассы.
ST>а во всех языках идентификатор может начинаться с @ ?
Не знаю. Но странно, что в Net не была заложены изначально метаклассы, так как они есть во многих языках.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, mihailik, Вы писали:
ST>>имхо нужно не за чистоту языка бороться, а как-то решать возникающиек проблемы
M>Реализовать метаклассы это проблема?
да
хочется минимум ручного кодирования
с шаблонами будет легче, но более-менее приличная реализация возможна только на уровне компилятора или макросов или я не прав
S> Ну это будущее покажет C# стандартизован и ограничен в возможностях.
Ну, все-таки прогресс имеется — вот, дженерики сделали...
Авось и доберутся до метаклассов рано или поздно.
Хотелось бы конечно ускорить этот процесс, но как?
Ротор соотв. образом дописать — лично у меня ума не хватит.
Здравствуйте, Serginio1, Вы писали:
S>Здравствуйте, s.ts, Вы писали:
ST>>нужна реализация для мэйнстрима (си шарп) S> Ну это будущее покажет C# стандартизован и ограничен в возможностях. S>MSDN Ресеч хочет рассширить возможности. В Delphi руки развязаны.
по крайней мере настоящее показывает, что лучше от борланда подальше держаться
(это, знаете, похоже на "хороший программист, но как товарищ дерьмо")
1. Для виртуальности нужен контракт. То есть на каждый класс со статическими виртуальными членами нужно завести интерфейс.
2. Нужно завести специальный класс типа брокера, допустим VirtualStaticBroker. Ему передают typeof(Some) и он возвращает интерфейс. Типа VirtualStaticBroker.GetStaticInterface(...).
3. Скрытый класс, который реализует интерфейс придётся строить в Runtime посредством Reflection.Emit. Этой работой будет заниматься VirtualStaticBroker.
4. Чтобы не строить класс на каждый GetStaticInterface нужно его построить и запомнить в Hashtable.
5. Чтобы отделять виртуальные статические методы нужно завести самодельный атрибут вроде как VirtualAttribute.