public override void Write(byte[] buffer, int offset, int count)
 {
     // raise the bytes written event
     byte[] temp = new byte[count];
     Array.Copy(buffer, offset, temp, 0, count);
     BytesWritten(temp);
     DecoratedInstance.Write(buffer, offset, count);
     return;
 }
    public override int Read(byte[] buffer, int offset, int count)
    {
        int bytesRead = DecoratedInstance.Read(buffer, offset, count);

        // raise the bytes read event
        byte[] temp = new byte[bytesRead];
        Array.Copy(buffer, offset, temp, 0, bytesRead);
        BytesRead(temp);
        return(bytesRead);
    }
 public override void SetLength(long value)
 {
     DecoratedInstance.SetLength(value);
     return;
 }
 public override long Seek(long offset, SeekOrigin origin)
 {
     return(DecoratedInstance.Seek(offset, origin));
 }
 public override void Flush()
 {
     DecoratedInstance.Flush();
     return;
 }
        //private T decoratedInstance;

        //public GenericDecorator(T instance)
        //{
        //    decoratedInstance = instance;
        //}
        //public GenericDecorator()
        //{
        //    decoratedInstance = new T();
        //}

        public virtual string SomeMethod()
        {
            return("Decorator_" + DecoratedInstance.SomeMethod());
        }