Чтобы уточнить, что сказал Ганс, вы можете использовать свойства вместо полей
Поля:
public static class Foo {
public static int Bar = 5;
}
Свойства:
public static class Foo {
private static int bar = 5;
public static int Bar {
get {
return bar;
}
set {
bar = value;
//callback here
}
}
}
Используйте свойства так же, как обычные поля. При их кодировании ключевое слово value
автоматически передается в средство доступа set и является значением, в которое устанавливается переменная. Например,
Foo.Bar = 100
Прошло бы 100
, поэтому value
будет 100
.
Сами по себе свойства не сохраняют значения, если они не реализованы автоматически, и в этом случае вы не сможете определить тело для методов доступа (получить и установить). Вот почему мы используем приватную переменную bar
для хранения фактического целочисленного значения.
edit : На самом деле у msdn гораздо более хороший пример:
using System.ComponentModel;
namespace SDKSample
{
// This class implements INotifyPropertyChanged
// to support one-way and two-way bindings
// (such that the UI element updates when the source
// has been changed dynamically)
public class Person : INotifyPropertyChanged
{
private string name;
// Declare the event
public event PropertyChangedEventHandler PropertyChanged;
public Person()
{
}
public Person(string value)
{
this.name = value;
}
public string PersonName
{
get { return name; }
set
{
name = value;
// Call OnPropertyChanged whenever the property is updated
OnPropertyChanged("PersonName");
}
}
// Create the OnPropertyChanged method to raise the event
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
}
http://msdn.microsoft.com/en-us/library/ms743695.aspx