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); }
在添加属性之前,从方法跨AppDomain
边界返回后, buffer
变量的内容丢失了。
类( SslStream
)inheritance自MarshalByRefObject
但未标记为Serializable
属性。 这是使参数按值传递的唯一方法吗? 在序列化类时,这些属性是否被.NET以某种方式识别? 它们真的会导致参数通过引用传递,还是只是复制了内容?
这是.NET Remoting的一个非常难以记录的function。 它与您的类是[Serializable]还是从MarshalByRefObject派生无关。 这里的问题是如何在AppDomain边界编组参数 。 呼叫本身是由Remoting引入的。 在调用之后,数组不会自动被编组,显然是性能优化。 只需要[Out]属性,暗示[In]。 我在MSDN中找不到关于此的任何相关文档,只是来自遇到同一问题的某人的博客文章 (向下滚动到“在Remoting中使用OutAttribute”)。
一些代码可以使用:
上述就是C#学习教程:In和Out属性如何在.NET中运行?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
using System; using System.Runtime.InteropServices; class Program { static void Main(string[] args) { var ad = AppDomain.CreateDomain("second"); var t = (Test)ad.CreateInstanceAndUnwrap(typeof(Test).Assembly.FullName, typeof(Test).FullName); var b = new byte[] { 1 }; t.Read(b); System.Diagnostics.Debug.Assert(b[0] == 2); } } class Test : MarshalByRefObject { public void Read([Out]byte[] arg) { arg[0] *= 2; } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/961350.html