2017-08-23 8 views
-1

ReadByteを呼び出すと、オーバーライドされたReadメソッドが実行されます。C#BinaryReader working weird

コードはここに

public object Read(Stream s) 
{ 
    Issues.Clear(); 

    if (AutoReset) 
     Reset(); 

    using (var r = new BinaryReader(s, Encoder, true)) 
    { 
     // check stream begin 
     if (r.ReadByte() != StreamBegin) // this r.ReadByte() goto.. 
     { 
ここ

私はReadByteを呼んでいます。このBinaryReaderSystem.IOです。

そして次ReadByte()方法はこちら

public override int Read(byte[] buffer, int offset, int count) 
{ 
    ..... Something 
} 

このメソッドは、カスタムクラスであるに行きます。

コールスタックここにある:

enter image description here

..だから、なぜこれが起こるのでしょうか?なぜこのコードはこのように機能しますか?

+1

'ReadByte()'は明らかに 'Read(byte []、int、int)'の形で実装されています。それは本当にあなたにとって大きな驚きですか? –

+0

そのクラスはどのクラスで上書きされますか?すべての 'ReadByte()'が次のバイトを読み込んでからストリームを進めるので 'ReadByte()'が 'Read(byte []、int、int)'を呼び出すのは正常です。 'ReadByte'がそれ自身のバージョンの' Read'コードを実装するのに本当の利点はありません。 – Claies

+0

@Jeff Mercado、Clasies ReadByteは "public class InstanceSerializer" "namespace EMx.Serialization"から呼び出され、ReadメソッドはReadByteは "public class MxStream" "namespace EMx.IO.MxData"にあります。と "public class InstanceSerializer"が "EMx.IO.MxData"を使用していませんでした。私はこれらの独立したクラスが一緒に働く方法を知りたいですか? –

答えて

0

ReadByte()を呼び出してRead()を呼び出し、次の位置に移動します。したがって、ReadByte()がオーバーライドされたRead()メソッドに移動するように、Read()メソッドはカスタムクラスでオーバーライドされます。