我已经搜索了一段时间,但我找不到任何问题。
我有一个整数:
private static int kills = 0;
我希望在该变量发生变化时运行一个函数。就像,它现在是0。如果它变为2,我想要调用 OnVarChange 这样的函数,并且函数 OnVarChange 将返回已更改的数量。在这种情况下,2-0 = 2,所以它将返回2.
这可能吗?我该怎么做?
希望你理解我刚才说的话:p
答案 0 :(得分:5)
您需要提供更改机制:
添加:
public static int Kills{
get{ return kills; }
set{
kills = value;
//change code here...
}
}
仅set
使用此公开Kills
属性。如果可能,请勿直接更改实例成员kills
。但总有一个例外。
答案 1 :(得分:2)
创建一个属性,允许在其中使用逻辑。这将是添加此类功能的好地方:
private static int kills = 0;
public static int Kills
{
get
{
return kills;
}
set
{
this.kills = value;
this.OnVarChange();
}
}
更好的选择是实现INotifyPropertyChanged
,这是一个界面,UI和框架的其他部分可以接受并采取行动。
public class X : INotifyPropertyChanged
{
private int kills = 0;
public int Kills
{
get
{
return kills;
}
set
{
this.kills = value;
this.OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([System.Runtime.CompilerServices.CallerMemberName] string propertyName = "")
{
PropertyChangedEventHandler pc = this.PropertyChanged;
if (pc != null)
{
pc(this, new PropertyChangedEventArgs(propertyName));
}
}
}
答案 2 :(得分:0)
最简单的Google搜索会告诉您实施Property Change Notification并为您提供一个非常容易理解的示例:
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));
}
}
}
答案 3 :(得分:0)
static int Kills
{
get{
return kills;
}
set{
OnVarChange(kills,value);
kills = value;
}
}
为kills
定义属性。使用此属性更改kills
的值。您可以使用此属性的set访问器来调用方法来检测变量kills
中的更改。