Class Registry Implementation

I wanted to implement a mechanism similar (in most respects) to the
Component Editors. I want to be able to register an editor for a class
(or super class).

Something like:

procedure RegisterComponentEditor(ComponentClass: TComponentClass;
ComponentEditor: TComponentEditorClass);

function  GetComponentEditor(ComponentClass:TComponentClass):TComponentEditorClass;

Basically Register... just adds it to an TClassList and Get...
searches the class list for the implementation class.

My questions is how do I find the BEST Editor for a component class.

Say I call:
RegisterComponentEditor(TControl, TGenericEditor);
RegisterComponentEditor(TButton, TButtonEditor);

Now if I call GetComponentEditor(TButton). It will find the first
entry in the list which can handle the TButton, ie:TControl since it
can do the job.

Now how do I find the best alternative in the list?
Is there a simple algorithm to search for it or should I somehow sort
the entries when adding them to the list.

Marc Rohloff