Ing*_*als 6 c# properties wrapper
我发现自己很重复,这当然不好.所以我想知道我是否可以为此做些什么.这是我的WPF应用程序中的常见代码:
private string _name;
public string Name
{
get { return _name; }
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged("Name");
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我想知道我是否可以以某种方式包装setter以使其更好,更具可读性.一个想法是这样的:
protected void PropertySetter<T>(T property, T value, string name)
{
if (EqualityComparer<T>.Default.Equals(property, value))
{
property = value;
OnPropertyChanged(name);
}
}
Run Code Online (Sandbox Code Playgroud)
用法如下:
private string _name2;
public string Name2
{
get { return _name2; }
set
{
PropertySetter<string>(Name2, value, "Name2");
}
}
Run Code Online (Sandbox Code Playgroud)
但我不确定这是非常聪明还是与Value类型一样好用?
我想我不是第一个尝试这样的事情的人,所以如果有人知道这样的事情是一个很好的万无一失的方式,请加入.我想我不能让财产改变类型安全没有反思,但任何想法也会有所帮助.
是的 - 这是完全可以接受的正常代码。
这是我发现的一个非常标准化的示例(我在代码示例中看到了很多这种类型的用法)。
public event PropertyChangedEventHandler PropertyChanged;
private void SetProperty<T>(ref T field, T value, string name)
{
if (!EqualityComparer<T>.Default.Equals(field, value))
{
field = value;
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
Run Code Online (Sandbox Code Playgroud)
将此代码包装在实现 的类中INotifyPropertyChanged,并从该类继承您的数据对象。
在您的示例中,您直接调用事件 -切勿这样做。从方法启动到调用事件期间,您可能会丢失事件引用。在调用事件之前始终创建事件的本地缓存。
| 归档时间: |
|
| 查看次数: |
2777 次 |
| 最近记录: |