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
クラス(SslStream
)は継承元でしたが、属性MarshalByRefObject
でマークされていませんでした。Serializable
これは、パラメーターを値渡しする唯一の方法ですか?これらの属性は、クラスがシリアル化されているときに.NETによって何らかの形で認識されていますか?そして、それらは本当にパラメータが参照によって渡される原因になるのでしょうか、それとも内容がコピーされたばかりなのですか?