2013-09-25 2 views
1

Я создал два метода защиты от перегрузки с аналогичными именами (но не такими же) типами параметров, и их заявление выглядит следующим образом:Как разрешить ошибку с одинаково названными типами в параметрах метода?

public static RectangleNineSides GetRectangleSide(System.Drawing.Rectangle rect, System.Drawing.Point p) 
public static RectangleNineSides GetRectangleSide(Microsoft.Xna.Framework.Rectangle rect, Microsoft.Xna.Framework.Point p) 

Как вы можете видеть, параметры отличаются в обоих методах, но при вызове один из них, как так:

h.RectangleNineSides side = h.GetRectangleSide(new Microsoft.Xna.Framework.Rectangle(), new Microsoft.Xna.Framework.Point()); 

в моем XNA проекте я получаю сообщение об ошибке сказав:

типа «System.Drawing.Point» определяется в сборке, которая является не упоминается. Вы должны добавить ссылку на сборки «System.Drawing, Version = 4.0.0.0, бла-бла»

Но почему уход компилятор о другом методе, если он даже не вызывается в любом месте в текущем проекте ?

Аналогичная ошибка появляется в любом проекте WinForms, но для типов XNA. Я даже прямо писал, что Rectangle и Point Я говорю, и я до сих пор получаю эту ошибку. Что я делаю не так? Невозможно ли перегружать методы без получения такой ошибки? Должен ли я просто изменить их имена?

+0

Просто потому, что этот метод не вызывается .. не означает, что он не находится в финальной сборке. Окончательной сборке нужны метаданные .. так что в случае непредвиденных событий другая сборка называет ее через отражение. Она знает о каждом типе вызываемого абонента (среди прочего). –

+0

Итак, я не должен смешивать их в классе помощника? – user1306322

ответ

1

Компилятор заботится, поскольку он компилирует код, который может быть или не может быть вызван; тем не менее ему все еще нужно скомпилировать код и решить, где именно этот тип определен.

я рекомендовал бы не поставить на различные методы рисования технологии в свой класс помощника, но если вы, то я бы определенно назвать их по-разному, например:

public static RectangleNineSides GetRectangleSide(System.Drawing.Rectangle rect, 
                System.Drawing.Point p) 
public static RectangleNineSides GetXnaRectangleSide(Microsoft.Xna.Framework.Rectangle rect, 
                Microsoft.Xna.Framework.Point p) 
+0

Итак, я буду менять оба их имени для ясности. – user1306322

Смежные вопросы