У .NET есть вещь, называемая удалением, где вы можете передавать объекты между отдельными приложениями или даже физическими машинами. Я не совсем понимаю, как это делается, поэтому этот вопрос.
В удалении есть два основных способа передачи объектов: либо они могут быть сериализованы (преобразованы в кучу байтов и перестроены на другом конце), либо они могут наследовать от MarshalByRefObject, и в этом случае .NET делает некоторые прозрачные прокси, а все вызовы методов отправляются обратно в исходный экземпляр.
Это довольно круто и работает как волшебство. И я не люблю магию в программировании. Глядя на MarshalByRefObject
с помощью Reflector, я не вижу ничего, что бы отличить его от любого другого типичного объекта. Даже не странный внутренний атрибут или что-то еще. Итак, как организована вся прозрачная доверенность? Могу ли я сам создать такой механизм? Могу ли я сделать альтернативный MyMarshalByRefObject
, который не наследует от MarshalByRefObject
, но все равно будет действовать одинаково? Или MarshalByRefObject
получает специальное лечение от самого .NET-движка, и весь удаленный ум не дублируется простым смертным?