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