title: C# : Converting Base Class to Child Class
body: <p>I have a class, NetworkClient as a base class :</p>
  
  <pre><code>using System.IO;
  using System.Net.Sockets;
  using System.Threading.Tasks;
  
  namespace Network
  {
  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  
  public class NetworkClient
  {
      public NetworkClient()
      {
          tcpClient = new TcpClient();
      }
      public NetworkClient(TcpClient client)
      {
          tcpClient = client;
      }
  
      public virtual bool IsConnected
      {
          get;
          private set;
      }
      private StreamWriter writer { get; set; }
      private StreamReader reader { get; set; }
  
      private TcpClient tcpClient
      {
          get;
          set;
      }
  
      public virtual NetworkServerInfo NetworkServerInfo
      {
          get;
          set;
      }
  
      public async virtual void Connect(NetworkServerInfo info)
      {
          if (tcpClient == null)
          {
              tcpClient=new TcpClient();
          }
          await tcpClient.ConnectAsync(info.Address,info.Port);
          reader = new StreamReader(tcpClient.GetStream());
          writer = new StreamWriter(tcpClient.GetStream());
      }
  
      public virtual void Disconnect()
      {
          tcpClient.Close();            
          reader.Dispose();
  
          writer.Dispose();
      }
  
      public async virtual void Send(string data)
      {
          await writer.WriteLineAsync(data);
      }
  
      public async virtual Task&lt;string&gt; Receive()
      {
          return await reader.ReadLineAsync();
      }
  
  }
  }
  </code></pre>
  
  <p>And also have a child class derived from NetworkClient :</p>
  
  <pre><code>using System.Net;
  
  namespace Network
  {
  using Data;
  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  
  public class SkyfilterClient : NetworkClient
  {
      public virtual IPAddress Address
      {
          get;
          set;
      }
  
      public virtual int Port
      {
          get;
          set;
      }
  
      public virtual string SessionID
      {
          get;
          set;
      }
  
      public virtual User UserData
      {
          get;
          set;
      }
  
      protected virtual bool Authenticate(string username, string password)
      {
          throw new System.NotImplementedException();
      }
  
  }
  }
  </code></pre>
  
  <p>The problem is, that when im trying to cast NetworkClient into SkyfilterClient. An exception is thrown, Unable to cast object of type 'Network.NetworkClient' to type 'Network.SkyfilterClient'.</p>
  
  <p>Whats wrong with my code ? I see that Stream can be converted to NetworkStream, MemoryStream. Why NetworkClient can't be converted to Skyfilter Client?</p>