我在线看到了一个示例教程,并为wpf项目看到了类似这样的类的属性。我想知道这会用更简单的术语转化为什么,因为我以前从未见过这样写过的课程。
我尝试的翻译是否正确?意思是它正在做教程类正在做的事情吗?
教程类
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;
}
}
答案 0 :(得分:3)
我们必须看到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);
}
答案 1 :(得分:2)
简短的回答:不,它没有做同样的事情。
教程类描述了应该有两个额外的方法:
private void Set(ObservableCollection<string> value)
{
// do something
}
private T Get<T>()
{
// do something
}
以下示例是您尝试猜测的自动属性版本:
public ObservableCollection<string> Directories
{
get; set;
}
也许这就是教程试图展示的内容?