Методы также сериализируются наряду с элементами данных в.NET?

Заголовок очевиден, я должен знать, сериализируются ли методы наряду с экземплярами объектов в C#, я знаю, что они не делают в Java, но я немного плохо знаком с C#. Если они не делают, я должен поместить исходный класс с потоком байтов (сериализованный объект) в одном пакете при отправке его в другой ПК? Исходный класс может быть похожим на файл DLL?

10
задан John Saunders 5 May 2010 в 06:00
поделиться

4 ответа

Нет. Информация о типе сериализуется вместе с состоянием. Чтобы десериализовать данные, ваша программа должна иметь доступ к сборкам, содержащим типы (включая методы).

16
ответ дан 3 December 2019 в 15:21
поделиться

Методы не сериализуются.

Не знаю, как в вашем случае, но если положить библиотеку (сборку / dll) и использовать ее на другом конце для десериализации, то все получится.

Ps. Вам, вероятно, следует создать несколько дополнительных вопросов с учетом факторов, задействованных в вашем сценарии. Если вы собираетесь динамически отправлять и запускать код, вы можете создать ужасные последствия для безопасности.

2
ответ дан 3 December 2019 в 15:21
поделиться

Я был в замешательстве, когда в .NET впервые появилась сериализация. Я думаю, это произошло из-за того, что в большинстве книг и руководств упоминается, что она позволяет вам сериализовать ваши "объекты" как XML и перемещать их, но на самом деле вы фактически сохраняете значения вашего объекта, чтобы вы могли обезвоживать их в дальнейшем. ни в коем случае вы не сохраняете весь объект на диск, поскольку для этого требуется dll, а она не содержится в XML-файле.

1
ответ дан 3 December 2019 в 15:21
поделиться

Это может быть легче понять, если вы изучили 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;
}

. По сути, именно так невиртуальные методы реализуются в объектно-ориентированных языках. Здесь важно то, что методы не являются частью данных экземпляра.

10
ответ дан 3 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: