public virtual object Clone() { Type typKlocka = GetType(); object kopia = Activator.CreateInstance(typKlocka); foreach (PropertyInfo właściwość in typKlocka.GetProperties().Where(w => w.PropertyType == typeof(WartośćWewnętrznegoKlockaZwracającegoWartość))) { WartośćWewnętrznegoKlockaZwracającegoWartość wartość = (WartośćWewnętrznegoKlockaZwracającegoWartość)właściwość.GetValue(this); WartośćWewnętrznegoKlockaZwracającegoWartość kopiaWartości = (WartośćWewnętrznegoKlockaZwracającegoWartość)właściwość.GetValue(kopia); if ((wartość != null) && (kopiaWartości != null)) { KlocekZwracającyWartość klocekZwracającyWartość = wartość[0]; if (klocekZwracającyWartość != null) { KlocekZwracającyWartość kopiaKlockaZwracającegoWartość = (KlocekZwracającyWartość)klocekZwracającyWartość.Clone(); kopiaKlockaZwracającegoWartość.MiejsceUmieszczenia = kopiaWartości; kopiaWartości[0] = kopiaKlockaZwracającegoWartość; } } } return(kopia); }
public override object Clone() { KlocekZwracającyWartość kopia = (KlocekZwracającyWartość)base.Clone(); kopia.MiejsceUmieszczenia = MiejsceUmieszczenia; return(kopia); }
public void PrzeczytajZXml(XElement elementXml, Konsola konsola, Semafor semafor, ObservableCollection <Zmienna> zmienne) { foreach (PropertyInfo właściwość in GetType().GetProperties()) { Type typWłaściwości = właściwość.PropertyType; XElement węzełWłaściwości = elementXml.Element(właściwość.Name); if ((węzełWłaściwości != null) && !węzełWłaściwości.IsEmpty) { if (właściwość.GetSetMethod() == null) { if (typWłaściwości == typeof(WartośćWewnętrznegoKlockaZwracającegoWartość)) { XElement węzełWartości = węzełWłaściwości.Elements().Single(); Type typKlockaZwracającegoWartość = Type.GetType(węzełWartości.Name.LocalName); if (typKlockaZwracającegoWartość != null) { KlocekZwracającyWartość klocekZwracającyWartość = (KlocekZwracającyWartość)Activator.CreateInstance(typKlockaZwracającegoWartość); WartośćWewnętrznegoKlockaZwracającegoWartość wartość = (WartośćWewnętrznegoKlockaZwracającegoWartość)właściwość.GetValue(this); klocekZwracającyWartość.MiejsceUmieszczenia = wartość; wartość[0] = klocekZwracającyWartość; klocekZwracającyWartość.PrzeczytajZXml(węzełWartości, konsola, semafor, zmienne); } } else if (typWłaściwości == typeof(ZawartośćKlockaPionowegoZZawartością)) { foreach (XElement węzełKlockaPionowego in węzełWłaściwości.Elements()) { Type typKlockaPionowego = Type.GetType(węzełKlockaPionowego.Name.LocalName); if (typKlockaPionowego != null) { KlocekPionowy klocekPionowy = (KlocekPionowy)Activator.CreateInstance(typKlockaPionowego); klocekPionowy.Rodzic = (KlocekPionowyZZawartością)this; ZawartośćKlockaPionowegoZZawartością zawartość = (ZawartośćKlockaPionowegoZZawartością)właściwość.GetValue(this); klocekPionowy.PrzeczytajZXml(węzełKlockaPionowego, konsola, semafor, zmienne); zawartość.Add(klocekPionowy); } } } } else { if (typWłaściwości == typeof(KlocekPionowyZZawartością)) { } else if (typWłaściwości == typeof(Konsola)) { właściwość.SetValue(this, konsola); } else if (typWłaściwości == typeof(Semafor)) { właściwość.SetValue(this, semafor); } else if (typWłaściwości == typeof(WartośćWewnętrznegoKlockaZwracającegoWartość)) { } else if (typWłaściwości == typeof(Zmienna)) { właściwość.SetValue(this, zmienne.Single(z => z.Nazwa == węzełWłaściwości.Value)); } else if ((typWłaściwości == typeof(bool)) || (typWłaściwości == typeof(double)) || (typWłaściwości == typeof(string))) { właściwość.SetValue(this, Convert.ChangeType(węzełWłaściwości.Value, typWłaściwości)); } else { Type typOpcji = Type.GetType(węzełWłaściwości.Value); if (typOpcji != null) { właściwość.SetValue(this, Activator.CreateInstance(typOpcji)); } } } } } }