Заголовок очевиден, я должен знать, сериализируются ли методы наряду с экземплярами объектов в C#, я знаю, что они не делают в Java, но я немного плохо знаком с C#. Если они не делают, я должен поместить исходный класс с потоком байтов (сериализованный объект) в одном пакете при отправке его в другой ПК? Исходный класс может быть похожим на файл DLL?
Нет. Информация о типе сериализуется вместе с состоянием. Чтобы десериализовать данные, ваша программа должна иметь доступ к сборкам, содержащим типы (включая методы).
Методы не сериализуются.
Не знаю, как в вашем случае, но если положить библиотеку (сборку / dll) и использовать ее на другом конце для десериализации, то все получится.
Ps. Вам, вероятно, следует создать несколько дополнительных вопросов с учетом факторов, задействованных в вашем сценарии. Если вы собираетесь динамически отправлять и запускать код, вы можете создать ужасные последствия для безопасности.
Я был в замешательстве, когда в .NET впервые появилась сериализация. Я думаю, это произошло из-за того, что в большинстве книг и руководств упоминается, что она позволяет вам сериализовать ваши "объекты" как XML и перемещать их, но на самом деле вы фактически сохраняете значения вашего объекта, чтобы вы могли обезвоживать их в дальнейшем. ни в коем случае вы не сохраняете весь объект на диск, поскольку для этого требуется dll, а она не содержится в XML-файле.
Это может быть легче понять, если вы изучили C. Класс, подобный
class C
{
private int _m;
private int _n;
int Meth(int p)
{
return _m + _n + p;
}
}
, по сути, является синтаксическим сахаром для
typedef struct
{
int _m;
int _n;
// NO function pointers necessary
} C;
void C_Meth(C* obj, int p)
{
return obj->_m + obj->_n + p;
}
. По сути, именно так невиртуальные методы реализуются в объектно-ориентированных языках. Здесь важно то, что методы не являются частью данных экземпляра.