У меня есть сборки, который определяет интерфейс с некоторыми перегрузками:Почему мне (иногда) приходится ссылаться на сборки, на которые ссылается сборка, с которой я ссылаюсь?
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, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a».
, хотя это даже не перегрузка, которую я вызываю. Когда я прокомментирую строку, где вызывается перегруженный метод InverseTransform
, он строит отлично, хотя я все еще создаю объект типа ITransform
.
Почему? И есть ли способ исправить это без необходимости добавлять ссылку на System.Drawing
всюду?
Из любопытства вы могли бы переименовать последнюю перегрузку в «InverseTransform2» и попробовать еще раз? Я не знаю ответа, но мне интересно, имеет ли он какое-либо отношение к разрешению перегрузки. – dasblinkenlight
Является ли 'e.Location' конкретным объектом' System.Windows.Point' или другим классом, который происходит из 'System.Windows.Point'? –
@dasblinkenlight: да, это связано с разрешением перегрузки, используя разные имена методов, решает его, но я не хочу менять интерфейс – mtijn