Почему я (иногда) должен ссылаться на сборки, на которые ссылается сборка, на которую я ссылаюсь?
У меня есть сборка A, которая определяет интерфейс с некоторыми перегрузками:
<code>public interface ITransform { Point InverseTransform(Point point); Rect InverseTransform(Rect value); System.Drawing.Point InverseTransform(System.Drawing.Point point); } </code>
... и сборка B, которая ссылается на A (двоичный файл, а не проект) и вызывает одну из перегрузок:
<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>
Чтобы быть точным, он называетSystem.Windows.Point
перегрузкаInverseTransform
метод, потому что это тип свойстваLocation
вe
.
Но когда я строю B в IDE, я получаю:
error CS0012: The type 'System.Drawing.Point' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
хотя это даже не перегрузка, которую я называю. Когда я закомментирую строку, где перегружен методInverseTransform
вызывается, он прекрасно собирается, хотя я все еще создаю экземпляр объекта типаITransform
.
Зачем? И есть ли способ исправить это, не добавляя ссылку наSystem.Drawing
везде?