Ich habe eine Baugruppe A, die eine Schnittstelle mit einigen Überlastungen definiert:Warum muss ich (manchmal) auf Baugruppen verweisen, die von der Baugruppe referenziert werden?
public interface ITransform
{
Point InverseTransform(Point point);
Rect InverseTransform(Rect value);
System.Drawing.Point InverseTransform(System.Drawing.Point point);
}
... und eine Baugruppe B, die mit A (die binäre, nicht das Projekt) verweist, und ruft eine der Überlastungen:
var transform =
(other.Source.TransformToDisplay != null &&
other.Source.TransformToDisplay.Valid) ?
other.Source.TransformToDisplay : null;
if (transform != null)
{
e.Location = transform.InverseTransform(e.Location);
}
Um genau zu sein, ruft die System.Windows.Point
Überlastung des InverseTransform
Verfahrens, weil das die Art der Eigenschaft Location
in e
ist.
Aber wenn ich B in den IDE bauen erhalte ich:
Fehler CS0012: Der Typ 'System.Drawing.Point' ist in einer Baugruppe definiert, die nicht verwiesen wird. Sie müssen der Assembly 'System.Drawing, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' einen Verweis hinzufügen.
obwohl das ist nicht einmal die Überlastung ich anrufe. Wenn ich die Zeile, in der die überladene Methode InverseTransform
aufgerufen wird, auskommentiere, baut es gut auf, obwohl ich noch ein Objekt vom Typ ITransform
instanziiere.
Warum? Und gibt es eine Möglichkeit, dies zu beheben, ohne überall einen Verweis auf System.Drawing
hinzufügen zu müssen?
Aus Neugier, könnten Sie die letzte Überladung in 'InverseTransform2' umbenennen und es erneut versuchen? Ich kenne die Antwort nicht, aber ich frage mich, ob es etwas mit der Überladungsauflösung zu tun hat. – dasblinkenlight
Ist 'e.Location' spezifisch ein' System.Windows.Point' Objekt oder eine andere Klasse, die von 'System.Windows.Point' abgeleitet ist? –
@dasblinkenlight: ja es hat mit Überladungsauflösung zu tun, mit verschiedenen Methoden Namen löst es, aber ich möchte nicht die Schnittstelle ändern – mtijn