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?