我在网上看到了一个示例教程,并看到了一个类的属性,它是为一个 wpf 项目编写的。我想知道这会用更简单的术语翻译成什么,因为我以前从未见过这样写的类(class)。
我尝试的翻译是否正确?意思是它做的是辅导类做的同样的事情吗?
辅导类
public ObservableCollection<string> Directories
{
get { return Get<ObservableCollection<string>>(); }
set { Set(value); }
}
我尝试猜测它会被写成什么
private ObservableCollection<string> _directories;
public ObservableCollection<string> Directories
{
get
{
return this._directories;
}
set
{
this._directories= value;
}
}
最佳答案
我们必须查看 Get/Set 实现才能正确回答这个问题,但我猜测这样做是为了提高代码的可读性。在 MVVM 属性中经常看到两件事:getter 中的自动初始化和 setter 中的属性更改通知...
private ObservableCollection<string> _directories;
public ObservableCollection<string> Directories
{
get
{
// auto-initialize
if (this._directories == null)
this._directories = new ObservableCollection<string>();
return this._directories;
}
set
{
this._directories = value;
RaisePropertyChanged("Directories"); // INPC
}
}
如果您为大量属性执行此操作,则会导致大量代码膨胀。我的猜测是您的教程类中的 Set 和 Get 方法可能用于自动实现这些功能,或者至少是类似的功能。以下代码将为属性(例如您发布的属性)提供该功能:
private Dictionary<string, object> Properties = new Dictionary<string, object>();
public T Get<T>([CallerMemberName] string propertyName = null)
{
if (!Properties.ContainsKey(propertyName))
Properties[propertyName] = default(T);
return (T)Properties[propertyName];
}
public void Set<T>(T value, [CallerMemberName] string propertyName = null)
{
Properties[propertyName] = value;
RaisePropertyChanged(propertyName);
}
关于用简单的术语为 wpf mvvm 编写的 c# 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33235444/