[C#] 'this' overschrijven

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goedemiddag beste mensen,

Aan de hand van dit topic ben ik bezig geweest om een object te bouwen, waarin wijzigingen ongedaan kunnen worden gemaakt. Tot nu toe de volgende code:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    public abstract class BusinessObject
    {
        private Stack<BusinessObject> _objectVersies;
        
        private Stack<BusinessObject> ObjectVersies
        {
            get { return _objectVersies; }
            set { _objectVersies = value; }
        }
        
        /// <summary>
        /// Starten met wijzigen van object
        /// </summary>
        public void WijzigenStarten()
        {
            this.ObjectVersies.Push(this.MemberwiseClone() as BusinessObject);
        }

        /// <summary>
        /// Annuleren van de wijzigingen
        /// </summary>
        /// <returns></returns>
        public void WijzigenAnnuleren()
        {
            if (this.ObjectVersies.Count != 0)
            {
                BusinessObject businessObject = this.ObjectVersies.Pop();
            }
        }

        /// <summary>
        /// Wijzigingen beeindigen
        /// </summary>
        public void WijzigenBeeindigen()
        {
            this.ObjectVersies.Clear();
        }
   }


En bij de uitvoer dus:

C#:
1
2
3
4
BusinessObject test = new BusinessObject();
test.WijzigenStarten();
//Doe vanalles met properties
test.WijzigenAnnuleren();


Op het annuleren na, werkt het prima. Maar hoe zorg ik er nu voor dat ik het huidige object kan annuleren. Dus in de WijzigenAnnuleren method moet het object zelf overschreven worden, met het laatst toegevoegde item uit de Stack.

Alvast bedankt voor de reacties.

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 01:56
Wat je doet, is je object clonen bij 'begin wijzigen', deze kopie van je object sla je op in je state-stack.
(Het clonen zou ik niet doen dmv het oproepen van MemberWiseClone, maar dmv je object te serializen / deserializen).

Bij het annuleren ga je dan het object van de stack 'poppen', en ga je dmv reflection alle members gaan overlopen en gaan zetten op hun vorige waarde.
(Zie bv hoe Lhotka het doet in z'n CSLA framework. Ik heb er hier een aantal posts over geschreven.

https://fgheysels.github.io/