Ho una classe, NetworkClient come classe base:C#: Conversione Classe Base per Bambini Classe
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<string> Receive()
{
return await reader.ReadLineAsync();
}
}
}
e hanno anche una classe figlia derivata da NetworkClient:
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();
}
}
}
Il problema è, che quando sto cercando di lanciare NetworkClient in SkyfilterClient. Viene generata un'eccezione, impossibile eseguire il cast dell'oggetto di tipo 'Network.NetworkClient' per digitare 'Network.SkyfilterClient'.
Cosa c'è di sbagliato nel mio codice? Vedo che Stream può essere convertito in NetworkStream, MemoryStream. Perché NetworkClient non può essere convertito in Skyfilter Client?
Ciao, ho provato il tuo esempio con qualche cambiamento. E convertì l'oggetto genitore in figlio - ma non migrò alcuna proprietà genitore all'oggetto figlio. Per il mio codice mi aspettavo un metodo che convertisse l'oggetto genitore in figlio e migri anche le proprietà genitore (le proprietà figlio saranno nulle). Qualche idea ? –
@HemantTank La cosa migliore da fare è chiedere in una domanda separata onestamente. Non ho mantenuto alcune di queste domande più vecchie. –
Grazie. Per ora sto usando la tecnica box/unbox basata su JSON. Non perfetto ma funziona bene per il mio scopo - https://stackoverflow.com/questions/8329470/convert-derived-class-to-base-class –