Вы можете обернуть данные в общий класс. Например, если предположить, что ваш базовый класс называется DragDropBaseControl
public class DragDropInfo
{
public DragDropBaseControl Control { get; private set; }
public DragDropInfo(DragDropBaseControl control)
{
this.Control = control;
}
}
И тогда перетаскивание может быть начато с помощью следующего в базовом классе
DoDragDrop(new DragDropInfo(this), DragDropEffects.All);
И вы можете получить доступ к данным в событиях перетаскивания, используя следующее
e.Data.GetData(typeof(DragDropInfo));
Правильно ли я понял ваше требование?