Перегрузка с той же подписью параметра

В C#, он возможный иметь те же параметры все же переопределяет друг друга (они отличаются в типах возврата),

public override Stocks[] Search(string Field,string Param){ //some code}
public override Stocks Search(string Field, string Param){//some code}

C# возвращает ошибку компиляции

6
задан Soham 1 May 2010 в 16:13
поделиться

5 ответов

В C # вы можете перегружать только методы с разными сигнатурами.

Тип возвращаемого значения метода не включается в сигнатуру - только имя метода, типы и количество параметров (и их порядок). У двух примеров одна и та же сигнатура, поэтому они не могут существовать вместе.

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

11
ответ дан 8 December 2019 в 15:59
поделиться

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

0
ответ дан 8 December 2019 в 15:59
поделиться

Как уже указывал Одеду в своем ответе, невозможно перегрузить метод, когда единственным отличием является тип возврата.

public override Stocks[] Search(string Field,string Param){ //some code}
public override Stocks Search(string Field, string Param){//some code}

Подумайте об этом: как компилятор должен знать, какой вариант метода вызывать? Это, по-видимому, зависит от результата поиска, и, очевидно, компилятор не может знать об этом заранее.

Фактически, то, что вам нужно, это функция one, которая имеет два возможных типа возврата. То, что вы не хотите , это два отдельных метода, потому что тогда вам придется заранее решить, какой из них вызвать. Очевидно, что здесь неправильный подход.

Одним из решений является всегдае возвращение массива; в случае, если найден только один объект Stocks, возвращается массив размера 1.

3
ответ дан 8 December 2019 в 15:59
поделиться

Насколько я знаю, это невозможно.

Даже если это так, это излишне сложно. Просто верните массив во всех случаях (если возвращается только одно значение, то это массив Stocks [1]). Это должно сэкономить вам время, тем более что C # делает использование массивов довольно простым.

0
ответ дан 8 December 2019 в 15:59
поделиться

Нет, Вы не можете.

CLR позволяет это, но по какой-то причине чуваки C# решили не использовать эту функцию CLR.

0
ответ дан 8 December 2019 в 15:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: