Tengo un conjunto A que define una interfaz con algunas sobrecargas:¿Por qué (a veces) tengo que hacer referencia a los ensamblados a los que hace referencia el ensamblaje al que hago referencia?
public interface ITransform
{
Point InverseTransform(Point point);
Rect InverseTransform(Rect value);
System.Drawing.Point InverseTransform(System.Drawing.Point point);
}
... y un conjunto B que hace referencia a A (el binario, no en el proyecto) y llama a una de las sobrecargas:
var transform =
(other.Source.TransformToDisplay != null &&
other.Source.TransformToDisplay.Valid) ?
other.Source.TransformToDisplay : null;
if (transform != null)
{
e.Location = transform.InverseTransform(e.Location);
}
Para ser precisos, se llama a la sobrecarga del método System.Windows.Point
InverseTransform
, porque ese es el tipo de la propiedad Location
en e
.
Pero cuando construyo B en el IDE me sale: CS0012
de error: El tipo 'System.Drawing.Point' se define en una asamblea que no se hace referencia. Debe agregar una referencia al ensamblado 'System.Drawing, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'.
a pesar de que ni siquiera es la sobrecarga que estoy llamando. Cuando comente la línea donde se llama al método InverseTransform
sobrecargado, se compila bien aunque sigo instanciando un objeto del tipo ITransform
.
¿Por qué? ¿Y hay una manera de solucionar esto sin tener que agregar una referencia a System.Drawing
en todas partes?
Por curiosidad, ¿podría cambiar el nombre de la última sobrecarga a 'InverseTransform2' y volver a intentarlo? No sé la respuesta, pero me pregunto si tiene algo que ver con la resolución de sobrecarga. – dasblinkenlight
¿Es 'e.Location' específicamente un objeto' System.Windows.Point' u otra clase que se deriva de 'System.Windows.Point'? –
@dasblinkenlight: sí, tiene que ver con la resolución de sobrecarga, usar diferentes nombres de métodos lo resuelve, pero no quiero cambiar la interfaz – mtijn