last day (15 days later) » 

9:43 AM
-1
Q: Как создавать классы и объекты на ходу, в языках Java и C#?

user409986Есть три языка C#, Java и Python. В первых двух метаклассов и чего бы то нибыло похожего, официально нету. В Python же есть функция type() с тремя аргументами, собственно, есть ли что то подобное в Java или в .Net ? Если да, то как этим пользоватся ?

 
Не особо хорошо знаю питон. Если я правильно помню - type позволяет получить тип объекта. В C# есть метод object.GetType(). Лично я, чаще всего, применяю данный метод при использовании дженериков (обобщённые типы). Данный метод, по аналогии с питоном, возвращает тип объекта и позволяет получить информацию о его свойствах, методах и т.д.
 
А какая задача решается таким подходом? java, C# все таки более-менее строго типизированные языки. А это значит, что структуры/классы должны быть известны на момент компиляции. Но если очень сильно хочется странного, то может просто использовать обычные Map?
 
@Frehzy Type() с одним аргументов возвращается, а уже с тремя занимается генерацием экземпляров меткласса type
@KoVadim в задаче стоит построить граф, узлы которого это классы (объекты), а рёбра это наследование этих классов друг от друга
 
стоит добавить больше подробностей в вопрос. Если ты знаешь как задача решается на одном из языков - пример стоит так же добавить в вопрос.
 
Понять бы ещё, для чего это все делается. Какая именно задача решается.
 
9:43 AM
@user409986 Если речь идёт о метаклассах, то в c# есть нечто похожее - Type. Стоит обговорить (если не прав - поправьте) - метакласс - тип, который служит для описания других типов. Добавьте в вопрос чуть больше ясности. Напишите, для чего вам это нужно, приведите примеры. Так станет гораздо проще решить вашу проблему
 
@Grundy лично мне кажется, что стоит убрать исскуственное припятствие в виде "конкретизации запроса/вопроса" с этого сайта
@KoVadim конечный продукт должен представлять из себя булевую, максимально простейшую нейронную сеть
 
булевую, максимально простейшую нейронную сеть - как это связано с созданием типов данных в рантайме? И почему именно в рантайме? Если вопрос, возможно ли лепить новые типы в .NET рантайме - возможно. Рефлексия к вашим услугам. Но создавать типы с помощью рефлексии - дело дорогое по ресурсам, нужно заранее понимать, что более эффективный метод отсутствует. А для того чтобы это понимать, надо предметно видеть конкретную техническую задачу. Не даром говорят, что если ты решаешь проблему в C# с помощью рефлексии, то у тебя 2 проблемы.
 
@aepot в рантайме, потому что другого механизма генерация классов, на сколько мне известно, не существует. А что по поводу связи, перечитайте мой коммент внимательней
 
Тут вообще похоже на XY проблему. Нейроночка с наследованием. Заманчиво
 
Классы можно создавать при компиляции, а в рантайме можно создавать из них объекты. Для масштабирования есть коллекции и деревья, всё это прекрасно и быстро работает в рантайме без создания каких-либо кастомных типов. Если надо напрямую с памятью работать и размечать там свои структуры данных - такая возможность тоже есть (а-ля C++), это будет быстрее и проще, чем мучения с рефлексией. Вариантов куча. Простой ответ на ваш вопрос - "да, в .NET это возможно". А вот стоит ли оно того - хз.
@KoVadim сериализовать это замучаешься потом, чтобы сдампить на диск, через ту же слоупочную рефлексию, но да, заманчиво, жаль что не перспективно.
А по поводу нейронок, велосипед в .NET уже есть, ML.NET называется.
 
9:43 AM
@aepot "Классы можно создавать при компиляции, а в рантайме можно создавать из них объекты" насколько мне известно, объект есть клас и наоборот
 
Нет, не так. Класс - это "шаблон" для создания объекта. Чтобы описать класс, в C# используется ключевое слово class, класс - частный случай типа, ссылочный тип. Объекты же создаются уже во время работы приложения, например с помощью ключевого слова new, еще объект называют экземпляром класса. Из одного класса (типа) можно создать сколько угодно однотипных обьектов, заполненных различными данными.
 
@aepot окей, как я бы мог их создавать динамически ?
 
Кого "их"? Объекты? Учить основы ООП в C#. Классы? После основ ООП учить обобщения, наследование+полиморфизм, анонимные типы и только потом, если ничего не поможет - рефлексию.
 
что то мне подсказывает, что автор вопроса просто не знает/умеет создавать классы через вызов конструктора и придумал себе хитрую схему. Да, если что то хорошо работает в питоне, ещё не значит, что его можно "дословно" перенести на другой язык. Вполне возможно, что в целевом языке есть более удобные средства. Это как переводить с одного человеческого языка на другой, просто заменой слов по словарю, иногда такое получается...
 
Потомственный маг-предсказатель в седьмом поколении на связи: Activator.CreateInstance
 
9:43 AM
мой хрустальный шар говорит о том, что маг-предсказатель переоценивает заказчика и не самом деле ему нужно что то очень простое - например, просто почитать книгу по нужному языку и попробовать хорошо сформулировать задачу.
 

last day (15 days later) »