【发布时间】:2015-10-06 02:46:51
【问题描述】:
这是ApiController 中Ok() 方法的签名:
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()吗? -
写
OkResult result = Ok();会发生什么? -
可选参数从调用者那里得到注入的默认值,所以它们是两个不同参数的方法
标签: c# asp.net .net methods overloading