Por que eu (algumas vezes) tenho que referenciar assemblies referenciados pelo assembly que eu referencio?

Eu tenho um assembly A que define uma interface com algumas sobrecargas:

<code>public interface ITransform
{
    Point InverseTransform(Point point);
    Rect InverseTransform(Rect value);
    System.Drawing.Point InverseTransform(System.Drawing.Point point);
}
</code>

... e um assembly B que referencia A (o binário, não o projeto) e chama uma das sobrecargas:

<code>var transform =
    (other.Source.TransformToDisplay != null &&
    other.Source.TransformToDisplay.Valid) ?
    other.Source.TransformToDisplay : null;
if (transform != null)
{
    e.Location = transform.InverseTransform(e.Location);
}
</code>

Para ser preciso, chama oSystem.Windows.Point sobrecarga doInverseTransform método, porque esse é o tipo da propriedadeLocation eme.

Mas quando eu construo o B no IDE, fico:

erro CS0012: O tipo 'System.Drawing.Point' é definido em um assembly que não é referenciado. Você deve adicionar uma referência ao assembly 'System.Drawing, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'.

mesmo que não seja a sobrecarga que estou chamando. Quando eu comento a linha onde o método sobrecarregadoInverseTransform é chamado, ele constrói bem mesmo que eu ainda esteja instanciando um objeto do tipoITransform.

Por quê? E existe uma maneira de corrigir isso sem ter que adicionar uma referência aSystem.Drawing em toda parte?

questionAnswers(5)

yourAnswerToTheQuestion