Во-первых, если B и C имеют общие методы, это недостаток проекта, они не разделяют интерфейс.Тем не менее, вы можете исправить это, даже не имея доступа к B и C.
Можно создать общий интерфейс.Предположим, у вас есть:
public class A
{
}
public class B : A
{
public void Start() { }
}
public class C : A
{
public void Start() { }
}
Вы можете создать общий интерфейс:
public interface IStartable
{
void Start();
}
и использовать его на производных классах от B и C:
public class BetterB : B, IStartable
{
}
public class BetterC : C, IStartable
{
}
Youможет не достичь этого, если вы получите экземпляры B и C как есть, но это можно рассмотреть, если вы создадите их.Фактически, со специализированными классами B и C вы можете использовать интерфейс вместо D<T>
.