Я пытался сериализовать массив через границу AppDomain
, используя следующий код:
public int Read(byte[] buffer, int offset, int count)
{
return base.Read(buffer, offset, count);
}
В качестве предположения, заметив атрибуты в другом месте, я отметил параметры метода атрибутами [In]
и [Out]
, что, похоже, заставило параметры вести себя так, как будто они передаются по ссылке.
Например:
public int Read([In, Out] byte[] buffer, int offset, int count)
{
return base.Read(buffer, offset, count);
}
До добавления атрибутов содержимое переменной buffer
терялось после возврата из метода через границу AppDomain
.
Класс (SlStream
) наследовался от MarshalByRefObject
, но не был помечен атрибутом Serializable
. Является ли это единственным способом сделать параметр передаваемым по значению? Распознаются ли эти атрибуты каким-то образом .NET при сериализации класса? И действительно ли они заставляют параметр передаваться по ссылке, или его содержимое просто копируется?