public void ChangeFromClassToInterface(Classifier @class) { @class.IsInterface = true; // the class itself cannot have a base class any more @class.ClearBaseClass(_messageSystem); // find all derived classes with this base class var derivedClasses = _classifiers.FindAllDerivedClassifiers(@class); foreach (var derivedClass in derivedClasses) { derivedClass.ClearBaseClass(_messageSystem); derivedClass.AddInterfaceImplementation(@class, _messageSystem); } // fire the notification at the end, because this will change all // existing classifier list items _messageSystem.Publish(@class, new ClassToInterfaceEvent(@class.Name)); }