我经常收到一些关于“使用‘新’表达式创建的未分配对象”的更清晰的警告。以下代码片段将演示这种情况:
我正在使用一个助手类(Observer.cs
),它监视其他类(MonitoredClass.cs
)的一些属性。当一个属性改变时,观察者类将改变的值写入另一个数据类(DataClass.cs
)。
简化的代码被剪断:
监控类.cs:
public class MonitoredClass : INotifyPropertyChanged
{
// simplified: in fact property calls OnPropertyChange(..)
public string Property1 { get; set; }
}
数据类.cs:
public class DataClass
{
public string LastProperty1Value { get; set; }
}
观察者.cs:
public class Observer
{
private MonitoredClass _monitoredClass;
private DataClass _dataClass;
public Observer(MonitoredClass monitoredClass, DataClass dataClass)
{
_monitoredClass = monitoredClass;
_dataClass = dataClass;
_monitoredClass.PropertyChanged+=MonitoredClassPropertyChanged;
}
private void MonitoredClassPropertyChanged(..)
{
_dataClass.LastProperty1Value = _monitoredClass.Property1;
}
}
到现在为止还挺好。
如果我现在使用上面的 Observer 类,如下所示:
...
new Observer(monitoredClassInstance, dataClassInstance);
...
比我得到一个更清晰的警告“可能由'new'表达式创建的未分配对象”。
我现在的问题是,是否有更好的解决方案/模式来设计这个观察者。粗略地说,我可以将新的观察者实例分配给一个私有字段。但比我有一个从未使用过的字段。或者我可以设置带属性的监控类实例和数据类实例,而不是在构造函数中传递它们。但这只是防止警告,实际上并没有改变架构。
提前感谢您的建议、意见、模式等。