Это подпись для метода Ok()
в ApiController
:Почему эти два метода не являются двусмысленными?
protected internal virtual OkResult Ok();
И это мой метод из моего RestController
класса (который простирается от ApiController
):
// Note that I'm not overriding base method
protected IHttpActionResult Ok(string message = null);
С OkResult
реализует IHttpActionResult
, оба эти методы можно назвать следующим образом:
IHttpActionResult result = Ok();
Фактически, это то, что я делаю в своем приложении.
PersistenceRestController
Мой класс (который простирается от RestController
), имеет следующие строки кода:
protected override async Task<IHttpActionResult> Delete(Key id)
{
bool deleted = //... Attempts to delete entity
if(deleted) return Ok();
else return NotFound();
}
Это компилируется нормально, и никакого предупреждения не поднят вопрос о методе двусмысленности. Почему это?
PersistenceRestController
также унаследовал защищенные методы от ApiController
, поэтому он должен иметь обе версии Ok()
(и это действительно так).
При выполнении выполненный метод является одним из моих RestController
.
Как компилятор знает, какой метод запускать?
Возможно, тип возврата? –
@ M.kazemAkhgary Оба метода возвращают один и тот же интерфейс –
Первый - 'internal'. Вы вызываете 'Ok()' из другой сборки? – Icemanind