Как работают атрибуты In и Out в .NET?

Я пытался сериализовать массив через границу 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 при сериализации класса? И действительно ли они заставляют параметр передаваться по ссылке, или его содержимое просто копируется?

10
задан g t 31 January 2012 в 08:40
поделиться