Я работаю над этим проектом с некоторыми другими колледжами. Он построен на Windows MDI forms
, и у нас есть собственный способ загрузки форм из-за специфической потребности клиентов.Способ изменения для приема различного количества и типа параметров
В начале метода пришлось принимать только два параметра:
protected void LoadForm<T>(ToolStripButton formButton, string buttonText) where T : Base Form
и потому даже, что был унаследован код мы наследуем некоторые формы, которые не нужно передавать параметры таким образом, мы имели этот метод:
protected void LoadForm<T>()
{
LoadForm<T>(null, null);
}
Тогда мой колледж необходимо пройти еще один параметр: long? EntityId
и снова не нарушать существующий код он изменил вышеуказанный метод:
protected void LoadForm<T>(long? loadEntityId = null) where T : BaseForm
{
LoadForm<T>(null, null, loadEntityId);
}
И фактический метод с бизнес-логикой стал:
protected void LoadForm<T>(ToolStripButton formButton, string buttonText, long? loadEntityId = null) where T : BaseForm
Теперь мне нужно пройти четвертый параметр себя и снова вопрос с не нарушая предыдущий код актуален. Я думал, что я правильно понял логику, но, похоже, я этого не сделал. Мне нужно передать булево значение bool IsClosingForm
поэтому я сделал метод witht он бизнес-логики, как это:
protected void LoadForm<T>(ToolStripButton formButton, string buttonText, long? loadEntityId = null, bool IsClosingForm= true) where T : BaseForm
и добавить новый метод для обработки ситуаций, когда необходимо передать параметр BOOL:
protected void LoadForm<T>(bool IsClosingForm= true) where T : BaseForm
{
LoadForm<T>(null, null, null, IsClosingForm);
}
а также изменить мой метод колледжей для вызова метода четыре параметра:
protected void LoadForm<T>(long? EntityId = null) where T : BaseForm
{
LoadForm<T>(null, null, EntityId, true);
}
Но это не работает, как это и ошибка, я получаю:
Вызов неоднозначен между методом
protected void LoadForm<T>(long? EntityId = null)
иprotected void LoadForm<T>(bool IsClosingForm= true)
Это очевидно, что я не получаю логики здесь, так у меня есть два вопроса - как изменить код, чтобы сделать его работу и, если это возможно, я хотел бы, чтобы кто-то указал, в чем причина моей ошибки, чтобы я мог понять логику этого. Сначала это казалось очень простой задачей, но теперь я думаю, что мне не хватает чего-то, что я не должен оставлять непонятым.
Можете ли вы опубликовать код, который вы используете, для вызова метода? Линия, которая генерирует эту ошибку? – goric
У меня много ошибок, но все для неоднозначных вызовов, таких как 'LoadForm (false);' или 'LoadForm ();' Я думаю, что есть ошибка при попытке передать значение 'long? ', Но can not' find the actual пример прямо сейчас. –
Leron
Ты создаешь монстра. Не создавайте множество перегруженных методов - это ужасно для вызывающего. Вместо этого напишите методы с РАЗЛИЧНЫМИ НАЗВАНИЯМИ. И тогда вы можете сделать имена более описательными в отношении того, что они ожидают. –