Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
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));
        }
Exemplo n.º 3
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();
        }
Exemplo n.º 4
0
        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
        }