using System.Collections.Generic;
public abstract class Element
public string Nom { get; set; }
public string CheminAcces { get; set; }
public DateTime DateCreation { get; protected set; }
public DateTime DateModification { get; set; }
public bool Visible { get; set; }
protected Element(string nom, string cheminAcces)
Nom = nom ?? throw new ArgumentNullException(nameof(nom));
CheminAcces = cheminAcces ?? throw new ArgumentNullException(nameof(cheminAcces));
DateCreation = DateTime.Now;
DateModification = DateTime.Now;
public abstract int GetTaille();
public override string ToString()
CheminAcces:{CheminAcces}
DateCreation:{DateCreation}
DateModification:{DateModification}
public override bool Equals(object obj)
return obj is Element element &&
public class Fichier : Element
public int Taille { get; set; }
public string Contenu { get; set; }
public Fichier(string contenu, string nom,string cheminAcces) :
public override int GetTaille()
public override string ToString()
return $@"{base.ToString()}Taille:{Taille}
public class Dossier : Element
public List<Element> Enfants { get; set; }
public Dossier(string nom, string cheminAcces) :
Enfants = new List<Element>();
public void Add(Element elem)
if (Enfants.Contains(elem))
throw new ArgumentException("Contient deja un element avec ce nom");
elem.CheminAcces = CheminAcces;
base.DateModification = DateTime.Now;
public void Remove(Element elem)
elem.CheminAcces = CheminAcces;
base.DateModification = DateTime.Now;
public Element GetEnfant(int i)
public override int GetTaille()
foreach (Element item in Enfants)
tailleDossier += item.GetTaille();
public override string ToString()
string listeEnfants = @"";
foreach (var item in Enfants)
listeEnfants += item+"" +
static void Main(string[] args)
Fichier f1 = new Fichier(nom:"f1",contenu:"ContenuF1",cheminAcces:@"C:\");
Fichier f2 = new Fichier(nom:"f2", contenu: "ContenuF2", cheminAcces: @"C:\");
Dossier d = new Dossier(nom:"d", cheminAcces: @"C:\dossier");