我有一個'App'類,它有一個'DeviceManager'類和一個窗體'MainForm'存儲爲字段的實例。 單擊系統托盤圖標可以看到MainForm。 DeviceManager具有Docked和Undocked方法,其中Docked開始同步操作。如果MainForm不可見,Docked方法只應該啓動操作。檢查一個C#屬性而不參考它的類?
DeviceManager無法訪問應用程序的成員,所以它不能使用應用程序對MainForm的引用來檢查表單的狀態。當DeviceManager沒有其他需要這樣的引用(MainForm和DeviceManager因此彼此不知道)時,將App傳遞給DeviceManager的構造函數看起來像很多耦合。
我正在考慮讓App.IsUserActive屬性的setter引發一個DeviceManager可以用來維護其自己的「IsUserActive」字段的事件。
有沒有其他方法可以研究?
編輯:添加代碼來說明:
internal class App
{
private DeviceManager _deviceMgr;
private MainForm _mainForm;
internal App()
{
_deviceMgr = new DeviceManager();
_mainForm = new MainForm { Visible = false };
}
}
internal class DeviceManager
{
private void Docked()
{
if (!_mainForm.Visible) //can't see MainForm or App from here
{
Connect();
StartSynchronization();
}
}
private void Undocked()
{
Disconnect();
}
}
如果您*顯示*代表性代碼而不是*描述*它會更容易理解您的問題。 – 2013-03-13 14:47:13
聽起來不錯。你也可以創建另一個類,它們都提供了用於存儲數據的引用,但是這在許多方面都是緊密耦合的。 – Hogan 2013-03-13 14:48:05