Ho un assembly A, che definisce un'interfaccia con alcuni sovraccarichi:Perché a volte (a volte) devo fare riferimento agli assiemi a cui fa riferimento l'assieme riferimento?
public interface ITransform
{
Point InverseTransform(Point point);
Rect InverseTransform(Rect value);
System.Drawing.Point InverseTransform(System.Drawing.Point point);
}
... e un gruppo B che fa riferimento A (binario, non il progetto) e chiama uno dei sovraccarichi:
var transform =
(other.Source.TransformToDisplay != null &&
other.Source.TransformToDisplay.Valid) ?
other.Source.TransformToDisplay : null;
if (transform != null)
{
e.Location = transform.InverseTransform(e.Location);
}
Per essere precisi, chiama il System.Windows.Point
overload del metodo InverseTransform
, perché questo è il tipo di proprietà Location
in e
.
Ma quando ho costruire B nell'IDE ottengo:
errore CS0012: Il tipo 'System.Drawing.Point' è definito in un assembly che non viene fatto riferimento. È necessario aggiungere un riferimento all'assembly 'System.Drawing, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'.
anche se questo non è nemmeno il sovraccarico che sto chiamando. Quando commento la riga in cui viene chiamato il metodo sovraccarico InverseTransform
, esso funziona bene anche se sto ancora creando un'istanza di un oggetto di tipo ITransform
.
Perché? E c'è un modo per risolvere questo problema senza dover aggiungere un riferimento a System.Drawing
ovunque?
Per curiosità, è possibile rinominare l'ultimo sovraccarico in 'InverseTransform2' e riprovare? Non conosco la risposta, ma mi chiedo se abbia qualcosa a che fare con la risoluzione del sovraccarico. – dasblinkenlight
È 'e.Location' specificamente un oggetto' System.Windows.Point' o un'altra classe che deriva da 'System.Windows.Point'? –
@dasblinkenlight: sì ha a che fare con la risoluzione di sovraccarico, usando nomi di metodi diversi lo risolve ma non voglio cambiare l'interfaccia – mtijn