我有两个简单的问题,基于我正在扩展现有类的事实...
1) 我正在实现一些自定义属性,我希望每当它们的值发生变化时调用一个特定的(无参数)函数。当然,如果不需要调用函数我可以使用传统的 { get;放; }
语法,不需要额外的变量。然而,即使我在 set
访问器中唯一修改的是对另一个函数的调用,我也必须声明一个私有(private)变量,以便我可以指定 get
和set
访问器我自己......没有声明这么多变量的更简单的方法吗?不是有类似general“属性变更”事件吗?
2) 因为我正在覆盖 .NET 用户控件,所以我想更改某些基本属性出现的类别。目前,为了使用 [Category("")]
语法,我必须将这些属性声明为 new
并实现 get
和set
引用基类的属性。有没有一种简单的方法可以做到这一点?
最佳答案
也许你应该看看 INotifyPropertyChanged界面。下面是一些使用它的示例代码。我使用这个接口(interface)来完成 WPF 中的数据绑定(bind)。您可以处理该事件,发现发生变化的属性并采取相应行动。如果您希望 setter 是异步的,您甚至可以在另一个线程 (PropertyChanged.BeginInvoke()) 上引发事件...
using System;
using System.ComponentModel;
public class Foo : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
private string _name;
public string Name
{
get
{
return _name;
}
set
{
_name = value;
RaisePropertyChanged("Name");
}
}
}
关于c# - 关于C#中属性的两个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5017599/