Automagiczne wywołanie kodu po każdym set w klasach potomnych

0

Cześć, mam klasę bazową, która ma taką właściwość jak Changed.
Mówi ona o tym, że obiekt w jakiś sposób został zmieniony.

I teraz tak, dziedziczą po niej inne klasy. Klasy potomne mają swoje właściwości.
Czy jest jakiś sposób na to, żeby po każdym ustawieniu właściwości w klasie potomnej, automagicznie odpaliła się jakaś metoda w klasie bazowej?

Chodzi mi po prostu o to, że muszę przechować gdzieś info, czy obiekt został zmieniony, czy nie. I normalnie muszę zrobić to tak:

public class BaseItem
{
  public bool Changed { get; protected set; }
}

public class Derived
{
  public DateTime StartDate
  {
    get { return startDate; }
    set 
    { 
      startDate = value;
      Changed = true;
    }
  }
}

Czy jest jakiś sposób na "automatyzację" tego, żebym nie musiał za każdym razem ustawiać tego Changed? Żeby się robiło samo?

0

Jeśli chodzi Ci o rejestrację zmian to się nazywa auditng i sa do tego biblioteki. Ze łba nie podam. Sprawdzę bo jeden z zespołów używa ale ja tam jestem product ownerem i nie kojarzę technikaliow. Idea jest Taką, że w systemie są rejestrowane wszystkie zmiany w obiektach danych osobowych. Kto, co i kiedy zmienił.

0

Mi chodzi o coś bardzo prostego. Żeby obiekt miał informację o tym, że jego stan się zmienił. Obiekt ma być zapisywany tylko, gdy stan jest zmieniony. Wyniki podane przez @abrakadaber wyglądają na ok, ale jeśli ktoś ma coś jeszcze, to z chęcią przyjmę ;)

0

Jeśli chcesz uaktualnić informację o tym że obiekt się zmienił od razu, no to innego rozwiązania niż robienie tego ręcznie albo aspektowo nie widzę.
Natomiast jeśli chcesz po jakimś czasie to sprawdzić, to najwygodniej policzyć sobie hasha obiektu na starcie, a potem hasha obiektu po jakimś czasie i sprawdzić czy się zmieniły czy nie .

0

tu masz gotową implementację w postsharpie: https://stackoverflow.com/a/30404001
łatwo możesz też napisać własny plugin do darmowego fody - możesz użyć MethodDecorator https://github.com/Fody/MethodDecorator

0

przepraszam, link powyżej powinien być https://stackoverflow.com/a/805740
to do czego zalinkowałem to rozwiązanie bez żadnych aspektów i dodatkowych zależności, ale nie jest w 100% rzetelne bo opiera się na wyliczaniu hashu dla klasy, która z małym prawdopodobieństwem może kolidować z poprzednio wyliczonym hashem mimo zmian w propertiesach - niemniej ciekawe rozwiązanie i dla małych ilości propertiesów i dopuszczalnych wartości jest możliwe stworzyć unikalny hashcode dla każdego możliwego stanu

1 użytkowników online, w tym zalogowanych: 0, gości: 1