Re: Changed class



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!=value1) Console.WriteLine("value1 is changed");
if(oldvalue2!=value2) Console.WriteLine("value2 is changed");
oldvalue1=value1;
oldvalue2=value2;
}
}
class myprogram
{
MyClass nn = new MyClass()
nn.value1=2;
nn.WhatIsChanged();
}
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=(MyClass)this.MemberwiseClone();
}
public void WhatIsChanged()
{
if(oldvalues.value1!=this.value1) Console.WriteLine("value1 is
changed");
if(oldvalues.value2!=this.value2) Console.WriteLine("value2 is
changed");
oldvalues=(MyClass)this.MemberwiseClone();
}
}
class myprogram
{
MyClass nn = new MyClass()
nn.value1=2;
nn.WhatIsChanged();
}
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.Value1Changed += new MyClass.IntegerChangedHandler(original_Value1Changed);
		original.Value2Changed += new MyClass.IntegerChangedHandler(original_Value2Changed);

		original.Value1 = 32;
		original.Value2 = 1024;
		
		original.Value1 = 5;
		original.Value2 = 2;

		Console.ReadLine();
	}

	private void original_Value1Changed(int oldValue, int newValue)
	{
		Console.WriteLine("Value1 has changed from {0} to {1}.", oldValue, newValue);
	}

	private void original_Value2Changed(int oldValue, int newValue)
	{
		Console.WriteLine("Value2 has changed from {0} to {1}.", oldValue, newValue);
	}
}

public class MyClass
{
	public delegate void IntegerChangedHandler(int oldValue, int newValue);
	
	public event IntegerChangedHandler Value1Changed;
	public event IntegerChangedHandler 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)
	{
		IntegerChangedHandler handler = Value1Changed;

		if (handler != null)
		{
			handler(oldValue, newValue);
		}
	}

	protected virtual void OnValue2Changed(int oldValue, int newValue)
	{
		IntegerChangedHandler handler = Value2Changed;

		if (handler != null)
		{
			handler(oldValue, newValue);
		}
	}
}


.



Relevant Pages

  • Changed class
    ... public int value1=0; ... private int oldvalue1=0; ... MyClass nn = new MyClass ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Compare private members of two classes
    ... class MyClass ... public bool MyCompare (MyClass mc) ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Is it good programming to set instance in class without using C-tor
    ... I have a class definition called MyClass see below. ... I create an instance of this class MyClass ... the question of what arguments should go on the constructor is ... your client has to test before they try to use an object instance. ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Object creation overhead
    ... > class MyClass ... This is, of course, over and above the memory required for the ... > 'MyClass' objects themselves. ... > The 'proxy' class approach won't see a reduction in the number of ...
    (comp.lang.java)
  • Re: Changed class
    ... public string Val1 { ... > public int value1=0; ... > MyClass nn = new MyClass ...
    (microsoft.public.dotnet.languages.csharp)

Loading