> I'm trying to build a class that can track changes to itself.
Class MyClass
{
public int value1=0;
public int value2=0;
private int oldvalue1=0;
private int oldvalue2=0;
public void WhatIsChanged()
{
if(oldvalue1!=v alue1) Console.WriteLi ne("value1 is changed");
if(oldvalue2!=v alue2) Console.WriteLi ne("value2 is changed");
oldvalue1=value 1;
oldvalue2=value 2;
}
}
class myprogram
{
MyClass nn = new MyClass()
nn.value1=2;
nn.WhatIsChange d();
}
But there MUST be a simpler way of doing this?
So if I use MemberwiseClone (); will it be like?
Class MyClass
{
public int value1=0;
public int value2=0;
private oldvalues=null;
MyClass()
{
oldvalues=(MyCl ass)this.Member wiseClone();
}
public void WhatIsChanged()
{
if(oldvalues.va lue1!=this.valu e1) Console.WriteLi ne("value1 is
changed");
if(oldvalues.va lue2!=this.valu e2) Console.WriteLi ne("value2 is
changed");
oldvalues=(MyCl ass)this.Member wiseClone();
}
}
class myprogram
{
MyClass nn = new MyClass()
nn.value1=2;
nn.WhatIsChange d();
}
But this don't work!
I would opt for more of a observer (.NET style) type of pattern. And let
another object be responsible for tracking changes.
public class Class1
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
private static void Main()
{
new Class1();
}
public Class1()
{
MyClass original = new MyClass(5, 2);
original.Value1 Changed += new MyClass.Integer ChangedHandler( original_Value1 Changed);
original.Value2 Changed += new MyClass.Integer ChangedHandler( original_Value2 Changed);
original.Value1 = 32;
original.Value2 = 1024;
original.Value1 = 5;
original.Value2 = 2;
Console.ReadLin e();
}
private void original_Value1 Changed(int oldValue, int newValue)
{
Console.WriteLi ne("Value1 has changed from {0} to {1}.", oldValue, newValue);
}
private void original_Value2 Changed(int oldValue, int newValue)
{
Console.WriteLi ne("Value2 has changed from {0} to {1}.", oldValue, newValue);
}
}
public class MyClass
{
public delegate void IntegerChangedH andler(int oldValue, int newValue);
public event IntegerChangedH andler Value1Changed;
public event IntegerChangedH andler Value2Changed;
private int value1;
private int value2;
public MyClass()
{}
public MyClass(int value1, int value2)
{
this.value1 = value1;
this.value2 = value2;
}
public int Value1
{
get { return value1; }
set
{
OnValue1Changed (value1, value);
value1 = value;
}
}
public int Value2
{
get { return value2; }
set
{
OnValue2Changed (value2, value);
value2 = value;
}
}
protected virtual void OnValue1Changed (int oldValue, int newValue)
{
IntegerChangedH andler handler = Value1Changed;
if (handler != null)
{
handler(oldValu e, newValue);
}
}
protected virtual void OnValue2Changed (int oldValue, int newValue)
{
IntegerChangedH andler handler = Value2Changed;
if (handler != null)
{
handler(oldValu e, newValue);
}
}
}