static void Main(string[] args) { ManipuladorFTP <Nivel2> ftp = new ManipuladorFTP <Nivel2>(); IArmazenador <Nivel3> armazenador = ftp; armazenador.Armazenar(new Nivel3()); IRecuperador <Nivel1> recuperador = ftp; Console.WriteLine(recuperador.Recuperar(0)); }
static void Main(string[] args) { ManipuladorFTP <Nivel2> FTP = new ManipuladorFTP <Nivel2>(); IArmazenador <Nivel3> armazenador = FTP; armazenador.Armazenar(new Nivel3()); IRecuperador <Nivel1> recuperador = FTP; Console.WriteLine(recuperador.Recuperar(0)); FTP.Armazenar(new Nivel2()); Console.WriteLine(FTP.Recuperar(0)); //Retornará o ToString da classe com namespace + nome da classe Console.ReadKey(); }
static void Main(string[] args) { var ftp = new ManipuladorFtp <Nivel1>(); IArmazenador <Nivel3> armazenador = ftp; armazenador.Armazenar(new Nivel3()); IArmazenador <Nivel2> armazenador2 = ftp; armazenador2.Armazenar(new Nivel2()); IRecuperador <Nivel1> recuperador = ftp; Console.WriteLine(recuperador.Recuperar(0)); Console.WriteLine(recuperador.Recuperar(1)); Console.ReadKey(); }
static void Main(string[] args) { ManipuladorFTP <Nivel2> ftp = new ManipuladorFTP <Nivel2>(); //Contravariancia: um tipo mais genérico é convertido para um tipo mais específico //IArmazenador Nivel3(que é mais especifico das classes) consegue receber ftp que é Nivel2(mais generico que Nivel3) graças a keyword in na Interface IArmazenador IArmazenador <Nivel3> armazenador = ftp; armazenador.Armazenar(new Nivel3()); //Covariancia: um tipo mais específico é convertido para um tipo mais genérico //IRecuperador Nivel1(que é mais generico das classes) consegue receber ftp que é Nivel2(mais especifico que Nivel1) graças a keyword out na Interface IRecuperador IRecuperador <Nivel1> recuperador = ftp; Console.WriteLine(recuperador.Recuperar(0)); Console.ReadKey(); //Lembrando que ManipuladorFTP, IArmazenador e IRecuperador são reference-type, ou seja, estão apontando exatamente para a mesma posição de memíria, para o mesmo objeto na memória }
public static MsdnParser With(IMsdn api, IArmazenador armazenador, IEnfileirador enfileirador = null) { return new MsdnParser(api, armazenador, enfileirador); }
public MsdnParser(IMsdn api, IArmazenador armazenador, IEnfileirador enfileirador) { this._msdnApi = api; this.armazenador = armazenador; _enfileirador = enfileirador; }