MemoryStream.Read(byte[] buffer,int offset,int count)这个函数没有返回值,它的功能是把当前流的值读到这个byte[]数组里。也就是说,你在外面定义了一个byte[]数组,你调这个函数,这个byte数组就被赋值了。
这个很奇怪,我知道有out,或者ref修饰符可以实现这个的功能。但是这个函数貌似没有out,ref参数,所以超级奇怪。msdn上的原型是这样的:
public override int Read (
[InAttribute] [OutAttribute] byte[] buffer,
int offset,
int count
)
我看到这两个修饰符[InAttribute] [OutAttribute] 。不明白是什么意思。那是不是我以后写函数也可以用这两个修饰符???这两个修饰符具体怎么使用。求教达人。
这个很奇怪,我知道有out,或者ref修饰符可以实现这个的功能。但是这个函数貌似没有out,ref参数,所以超级奇怪。msdn上的原型是这样的:
public override int Read (
[InAttribute] [OutAttribute] byte[] buffer,
int offset,
int count
)
我看到这两个修饰符[InAttribute] [OutAttribute] 。不明白是什么意思。那是不是我以后写函数也可以用这两个修饰符???这两个修饰符具体怎么使用。求教达人。
然后函数里面 吧值给你添入到这块区域里面所以不用 out ref
字典 Dictionary.Keys.CopyTo(Array array)的作用是一致的,在你预先开好的内存空间中,把你获取的值填充进去;
byte是值类型,如果写
public void Test(byte a) { a = 1; }
调用
byte a=0;
Test(a);
//此时a还是0。
如果用ref修饰,则a会变为1.
这个很容易理解。MemoryStream.Read(byte[] buffer,int offset,int count)
byte[]是什么类型?你buffer.GetType().ToString()就可以看到了。是Array类型。这是个引用类型。意思是buffer指向一个byte的数组,可以通过buffer访问到这个数组。Read方法就是通过buffer访问数组的。所以不需要写ref或out。
ref byte[]是什么意思呢?是说你传递的buffer是引用的引用。你可以在函数内指定buffer指向哪里
byte[] a = new byte[0];//a.Length = 0;
public void Test(ref byte[] buf){buf = new byte[1];}
//a.Length = 1