道歉标题有误导之嫌,但我不知道确切地称之为什么,我这里寻找。我有以下“主要”类:事件处理 - 发件人为主要类别中,如果
public class Entity : INotifyPropertyChanged
{
public string Name { get; set; }
public EntityRole Role { get; set; }
public EntityStats Stats = new EntityStats();
//Other stuff....
}
而且......子类? (合适的名字,将不胜感激这个)...叫EntityStats
:
public class EntityStats : INotifyPropertyChanged
{
public int CurrentHealth
{
get { return _currentHealth; }
set
{
if (value != _currentHealth)
{
_currentHealth = value;
OnPropertyChanged("CurrentHealth");
}
}
}
//other properties...
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, e);
}
protected void OnPropertyChanged(string propertyName)
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
}
凡Entity
对象包含EntityStats
类型的属性。
在我的代码的另一边,我注册一个Entity
对象监听PropertyChanged
事件:
public void RegisterEntity(Entity entity)
{
entity.Stats.PropertyChanged += entity_PropertyChanged;
}
void entity_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "CurrentHealth")
{
Message.Write("CurrentHealth property changed!");
DeathCheck((Entity)sender);
}
}
我遇到的问题与DeathCheck((Entity)sender);
- 因为CurrentHealth
OnPropertyChanged
事件是部分EntityStats
类,该对象的类型为EntityStats
,其中只包含我需要的部分数据。
我如何确定Entity
对象sender
所属的或我怎么能重构这个代码,以便当内EntityStats
变化的特性,在Entity
类引发的事件?
有很多方法可以做到这一点。在entitystat中创建父属性并存储实体对象。这样你可以访问entitiy属性。不过,根据您的要求,我认为从实体而不是entitystat公开事件会很有用。 – XtremeBytes
@XtremeBytes感谢您的评论。你能否提供一个答案来展示如何从“实体”类暴露事件?这样做对我来说最有意义,但是我不太清楚如何实现它,因为CurrentHealth是EntityStats的一个属性。 – levelonehuman