Почему мне (иногда)приходится ссылаться на сборки, на которые ссылается сборка, на которую я ссылаюсь?

У меня есть сборка A, которая определяет интерфейс с некоторыми перегрузками:

public interface ITransform
{
    Point InverseTransform(Point point);
    Rect InverseTransform(Rect value);
    System.Drawing.Point InverseTransform(System.Drawing.Point point);
}

...и сборка B, которая ссылается A (на двоичный файл, а не на проект)и вызывает его перегрузок:

var transform =
    (other.Source.TransformToDisplay != null &&
    other.Source.TransformToDisplay.Valid) ?
    other.Source.TransformToDisplay : null;
if (transform != null)
{
    e.Location = transform.InverseTransform(e.Location);
}

Чтобы быть точным, он вызывает перегрузку System.Windows.Pointметода InverseTransform, потому что это тип свойства Locationв e.

Но когда я создаю B в IDE, я получаю:

ошибку CS0012:Тип System.Drawing.Point определен в сборке, на которую нет ссылок. Вы должны добавить ссылку на сборку «System.Drawing, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a».

хотя это даже не та перегрузка, о которой я звоню. Когда я комментирую строку, в которой вызывается перегруженный метод InverseTransform, он отлично строится, хотя я все еще создаю экземпляр объекта типа ITransform.

Почему? И есть ли способ исправить это, не добавляя везде ссылку на System.Drawing?

11
задан BartoszKP 10 November 2014 в 16:27
поделиться