私はまだこのようなことの初心者であり、イベントとそれらを適切に使用する方法をよりよく理解しようとしています.
一連のオブジェクトを格納するコンテナーを持つマネージャー クラスがあります。各オブジェクトにはイベントがあります (基本的に、そのオブジェクトが行うことを実行したことを示します)。マネージャー クラスがイベントをサブスクライブし、イベントが発生したときにコンテナーからオブジェクトを削除したいと考えています。
オブジェクトのイベントに登録すると、そのオブジェクトのすべてのインスタンスに登録されますか、それともインスタンス固有ですか?
だからここに私が見ているもののようなものがあります:
class MyManager
{
private ConcurrentDictionary<string, MyObject> m_myObjectCollection;
public MyManager()
{
m_myObjectCollection = new ConcurrentDictionary<string, MyObject>();
}
private void RemoveObject(MyObject myObject)
{
//remove object from collection
}
}
class MyObject
{
public delegate void MyObjectFinished_EventHandler(object source, EventArgs e);
public event MyObjectFinished_EventHandler OnFinished;
public MyObject()
{
this.OnFinished += new MyObjectFinished_EventHandler(MyObject_OnFinished);
}
private void MyObject_OnFinished(object source, EventArgs e)
{
//do some clean up stuff
}
private void DoStuff()
{
//do stuff until finished
OnFinished(this, new EventArgs());
}
マネージャー クラスで MyObject のインスタンスを作成し、そのオブジェクトのイベントに登録するだけで十分ですか? それは私には正しくないようです。私の本能は、そのオブジェクト タイプのすべてのインスタンスではなく、その 1 つのオブジェクトのイベントにのみ登録されると言っています。
それとも、コレクションに追加するときに各 MyObject に登録し、削除したら登録を解除する必要がありますか?
または、これを完全に処理するより良い方法はありますか?