using System.Collections.Generic;
public static void Main()
var rucickove = new RucickoveHodiny(TypBaterky.AA, 3);
rucickove.NastavCas("7 hodin, 52 minut a 15 vterin");
var digitalni = new DigitalniHodiny();
digitalni.PocetBaterek = 2;
digitalni.TypBaterky = TypBaterky.AAA;
digitalni.NastavCas("07:52:15");
var jednoDigi = new JednoducheDigitalniHodiny();
jednoDigi.NastavCas("0752");
var hodiny = new List<Hodiny>() { rucickove, digitalni, jednoDigi };
static void UdrzbaHodin(List<Hodiny> hodiny)
if (h is IHodinyNaBaterky)
var hb = (IHodinyNaBaterky) h;
hb.VymenitBaterky(hb.PocetBaterek);
interface IHodinyNaBaterky
TypBaterky TypBaterky { get; }
int PocetBaterek { get; }
void VymenitBaterky(int pocetBaterek);
public abstract void NastavCas(string formatCasu);
public virtual string ZobrazAktualniCas()
return Cas.TimeOfDay.ToString();
class RucickoveHodiny : Hodiny, IHodinyNaBaterky
private readonly TypBaterky typ;
private readonly int pocet;
public TypBaterky TypBaterky
public RucickoveHodiny(TypBaterky typ, int pocet)
public override void NastavCas(string veta)
string[] casti = veta.Split(new char[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries);
int hodiny = int.Parse(casti[0]);
int minuty = int.Parse(casti[2]);
int vteriny = int.Parse(casti[5]);
Cas = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, hodiny, minuty, vteriny);
public override string ZobrazAktualniCas()
int hodiny = Cas.Hour % 12;
return "malá ručička na "+ hodiny +", velká ručička na " + Cas.Minute + " a vteřinová na " + Cas.Second;
public void VymenitBaterky(int pocetBaterek)
Console.WriteLine("Baterky rucickovych hodin vymemeny.");
class JednoducheDigitalniHodiny : Hodiny
public override void NastavCas(string formatCasu)
int hodiny = int.Parse(formatCasu.Substring(0, 2));
int minuty = int.Parse(formatCasu.Substring(2, 2));
Cas = DateTime.Today.AddHours(hodiny).AddMinutes(minuty);
class DigitalniHodiny : JednoducheDigitalniHodiny, IHodinyNaBaterky
public TypBaterky TypBaterky { get; set; }
public int PocetBaterek { get; set; }
public override void NastavCas(string formatCasu)
Cas = DateTime.Parse(formatCasu);
public void VymenitBaterky(int pocetBaterek)
Console.WriteLine("Baterky digitalnich hodin vymemeny.");