Методы также сериализуются вместе с членами данных в .NET? - PullRequest
10 голосов
/ 04 мая 2010

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

Ответы [ 4 ]

16 голосов
/ 04 мая 2010

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

10 голосов
/ 05 мая 2010

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

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

2 голосов
/ 04 мая 2010

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

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

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

1 голос
/ 05 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...