Это подпись для метода 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
.
Как компилятор знает, какой метод запускать?