「新しい表現で作成された未割り当てオブジェクト」に関する警告が表示されることがよくあります。他のクラス(MonitoredClass.cs
)のいくつかのプロパティを監視するヘルパークラス(Observer.cs
)を使用しています。プロパティーが変更されると、オブザーバー・クラスは変更された値を他のデータ・クラス(DataClass.cs
)に書き込みます。切り取らデザイン - 割り当てられていないオブジェクトを防ぐためのパターン
単純化されたコード:
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;
}
}
とても良いです。
私はObserverクラス次のように上から今使用している場合:
...
new Observer(monitoredClassInstance, dataClassInstance);
...
私はReSharperの警告が表示されますよりも、「『新しい』式によって作成された可能性割り当てられていないオブジェクト」。
私の質問は、このオブザーバーを設計するためのより良い解決策/パターンがある場合です。 大雑把には、新しい観測者インスタンスをプライベートフィールドに割り当てることができます。しかし、私は決して使用されていないフィールドを持っています。 または、コンストラクタに渡す代わりに、プロパティを使ってmonitoredClassInstanceとdataClassInstanceを設定できます。しかし、これは警告を防止するだけですが、実際にはアーキテクチャを変更しません。あなたのアドバイスを事前に
おかげで、意見、パターンなど
"新しいオブザーバ(mci、dci)"を変数に割り当てていますか? –
ガーベッジ・コレクターがnewleyのインスタンス化された 'Observer'を収集するのを止めますか? – Jodrell
var a =新しいオブザーバ(monitoredClassInstance、dataClassInstance); – phnkha