static void Main(string[] args)
        {
            // puedes declarar de tipo clase padre y asignarle una calse hijo
            Animal perro = new Perro();
            Animal vaca  = new Vaca();
            Animal oveja = new Oveja();

            // o puedes definirla totalmente como una clase hijo y aun asi lo aceptara
            Oveja ovejaO = new Oveja();

            AnimalHaceRuido(perro);
            AnimalHaceRuido(vaca);
            AnimalHaceRuido(oveja);// como la oveja no tiene un override para el sonido, muestra el rudio generico
            AnimalHaceRuido(ovejaO);

            Console.ReadKey();
        }
 public void moverOveja(Oveja ov)
 {
     Dispatcher.BeginInvoke(new Action(() =>
     {
         try
         {
             Canvas ct = cancha[ov.antx, ov.anty];
             if ((string)ct.Tag == "ov")
             {
                 Grid.SetColumn(ct, ov.PX);
                 Grid.SetRow(ct, ov.PY);
                 cancha[ov.PX, ov.PY]     = ct;
                 cancha[ov.antx, ov.anty] = null;
                 ov.antx = 0; //Incorporar en la propiedad
                 ov.anty = 0;
             }
         }
         catch
         {
         }
     }));
 }