Tôi thường nhận được một số cảnh báo chia sẻ lại về "các đối tượng chưa được gán được tạo bằng biểu thức 'mới'. Đoạn mã sau bị cắt phải thể hiện tình huống:Thiết kế-Mẫu để ngăn các đối tượng chưa được gán
Tôi đang sử dụng lớp trợ giúp (Observer.cs
) theo dõi một số thuộc tính từ một lớp khác (MonitoredClass.cs
). Khi một thuộc tính thay đổi, lớp quan sát ghi giá trị đã thay đổi vào một lớp dữ liệu khác (DataClass.cs
).
đang đơn giản hóa snipped:
MonitoredClass.cs:
public class MonitoredClass : INotifyPropertyChanged
{
// simplified: in fact property calls OnPropertyChange(..)
public string Property1 { get; set; }
}
DataClass.cs:
public class DataClass
{
public string LastProperty1Value { get; set; }
}
Observer.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;
}
}
Cho đến nay rất tốt.
Nếu tôi sử dụng tại lớp Observer của tôi từ trên cao như sau:
...
new Observer(monitoredClassInstance, dataClassInstance);
...
hơn tôi nhận được một cảnh báo resharper "đối tượng được gán có thể được tạo ra bởi 'mới' khái niệm".
Câu hỏi của tôi bây giờ là, nếu có giải pháp/mẫu tốt hơn để thiết kế người quan sát này. Trong số thô, tôi có thể cấp phát cá thể người quan sát mới cho trường riêng tư. Nhưng hơn tôi có một lĩnh vực mà không bao giờ được sử dụng. Hoặc tôi có thể thiết lập các surveClassInstance và dataClassInstance với các thuộc tính thay vì vượt qua chúng trong constructor. Nhưng điều này chỉ ngăn chặn cảnh báo, nhưng trên thực tế không thay đổi kiến trúc.
Cảm ơn trước lời khuyên của bạn, ý kiến, mô hình, vv
Bạn có chỉ định "Máy quan sát mới (mci, dci)" cho một biến không? –
Điều gì ngăn cản bộ thu gom rác thu thập "Observer" mới của bạn? – Jodrell
var a = Observer mới (monitoringClassInstance, dataClassInstance); – phnkha