理想的には、削除、名前変更操作はオブジェクトに属すべきではなく、これらはコンテナにのみ属すべきです。
これを行う理由は、各オブジェクトが UI に表示され、「削除」や「名前の変更」などのオプションを使用して独自に生成されたコンテキスト メニューがあるためです。
コンテナに対する静止操作は、次のように呼び出す必要があります
container.Delete(Object)
container.Rename(Object, String newName)
オブジェクト自体に DeleteMe、Rename を作成すると、コンテナーに依存するオブジェクトが作成され、List、Dictionary などの他のコンテナーに格納するために使用できなくなります (または、DeleteMe は失敗します)。
削除ハンドラーがコンテナーからオブジェクトを削除する必要があるという要件については、コマンド patternを使用できます。例えば
DeleteCommand command = new DeleteCommand(); // Create new Command
CommandManager.Register(command); // Create CommandManager class that will have mechanism of registering command, and has reference to object container. method is something like command.Set(Object container)
command.Execute(this); // pass instance as parameter, and in the Execute it will be similar to container.Remove(parameter);
上記のコードは単なる概要であり、要件に応じてカスタマイズできます。他のアクション (名前の変更など) も同様に追加できます。