XML C#

using System;
using System.IO;
using System.Collections.ObjectModel;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Xml.Xsl;
using System.Xml.XPath;
namespace A4G.Utils.Xml
{
  public class XsltTransformationHelper : IDisposable
  {
    private bool _disposed = false;
    public XsltTransformationHelper(string xsltPath)
    {
      _xsltPath = xsltPath;
      _xsltReader = new XmlTextReader(XsltPath);
      XslTransform.Load(_xsltReader);
    }
    ~XsltTransformationHelper()
    {
      Dispose(false);
    }
    private readonly string _xsltPath;
    public string XsltPath
    {
      get
      {
        return _xsltPath;
      }
    }
    private XslCompiledTransform _transform = new XslCompiledTransform();
    private XslCompiledTransform XslTransform
    {
      get
      {
        return _transform;
      }
    }
    private readonly XmlReader _xsltReader;
    private XmlReader XsltReader
    {
      get
      {
        return _xsltReader;
      }
    }
    public byte[] TransformWithXslt(byte[] sourceBytes)
    {
      MemoryStream source = new MemoryStream(sourceBytes, false);
      XmlReader xmlReader = new XmlTextReader(source);
      MemoryStream destination = new MemoryStream();
      byte[] destinationBytes = null;
      try
      {
        XslTransform.Transform(xmlReader, null, destination);
        destinationBytes = destination.ToArray();
      }
      finally
      {
        destination.Close();
        xmlReader.Close();
        source.Close();
      }
      return destinationBytes;
    }
    #region IDisposable Members
    public void Dispose()
    {
      Dispose(true);
      GC.SuppressFinalize(this);
    }
    private void Dispose(bool disposing)
    {
      if (_disposed)
      {
        return;
      }
      if (disposing)
      {
        // clean up managed resources
        XsltReader.Close();
      }
      // clean up unmanaged resources
      _disposed = true;
    }
    #endregion
  }
}