Dlaczego muszę (czasami) odwoływać się do zespołów, do których odwołuje się odwołanie do złożenia?
Mam zespół A, który definiuje interfejs z pewnymi przeciążeniami:
<code>public interface ITransform { Point InverseTransform(Point point); Rect InverseTransform(Rect value); System.Drawing.Point InverseTransform(System.Drawing.Point point); } </code>
... i zespół B, który odwołuje się do A (binarny, nie do projektu) i wywołuje jedno z przeciążeń:
<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>
Aby być precyzyjnym, nazywa sięSystem.Windows.Point
przeciążenieInverseTransform
metoda, ponieważ jest to typ nieruchomościLocation
we
.
Ale kiedy buduję B w IDE, otrzymuję:
błąd CS0012: Typ „System.Drawing.Point” jest zdefiniowany w zespole, do którego nie ma odniesienia. Musisz dodać odwołanie do zespołu 'System.Drawing, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'.
nawet jeśli to nie jest przeciążenie, które dzwonię. Kiedy komentuję linię, w której jest przeciążona metodaInverseTransform
jest wywoływany, buduje dobrze, mimo że nadal tworzę instancję obiektu typuITransform
.
Czemu? Czy istnieje sposób, aby to naprawić bez dodawania odniesienia doSystem.Drawing
wszędzie?