2016-04-22 100 views
3

在Visual Studio中按F12(转到定义)Controller它向您显示抽象基类。为什么Controller从GitHub上的ControllerBase继承而不是VS?

public abstract class Controller : IActionFilter, IFilterMetadata, IAsyncActionFilter, IDisposable 

但是,当查找Controller.cs on GitHub。它表明它继承自ControllerBase

public abstract class Controller : ControllerBase, IActionFilter, IAsyncActionFilter, IDisposable 

这是为什么?

我很困惑。另外,由于HomeController继承自Controller当C#不支持多重继承时,Controller如何继承自ControllerBase

+0

控制器只是继承ControllerBase类休息是接口 – brykneval

+0

@brykneval,但是'HomeController'继承自'Controller',继而从'BaseController'继承。但也许这不是多重继承? – Fred

回答

3

这两者来自不同的时间点。因此,例如,您在GitHub上链接的文件是该文件的当前版本,请注意它来自Dev分支。

dev branch

而且更可能你不会从目前的Dev分支运行的代码。

如果您单击GitHub上的历史记录按钮,链接到您的文件将会看到该文件的修订历史记录。

Revision history

我通过点击<检查了各种版本的文件>按钮,每个修订,但不匹配正在运行的代码的版本。我发现此文件的修订历史记录只能追溯到2016年1月22日。因此,在此之前,Controller代码必须已定义在其他文件中或出于某种其他原因,修订历史记录已丢失(可能是在他们将其从MVC 6核心MVC 1.0)。

很可能你正在运行RC1的代码。 GitHub上的Controller.cs版本与您看到的版本更接近:https://github.com/aspnet/Mvc/blob/6.0.0-rc1/src/Microsoft.AspNet.Mvc.ViewFeatures/Controller.cs它应该完美匹配,如果它是正确的代码版本,但我看到它仍然有些不同。它匹配的意义在于它不会从ControllerBase继承。

rc1 version of the code

对于多重继承

也。当HomeController从Controller继承并且Controller从ControllerBase继承时,它不是多重继承。如果有一个ControllerBase,并且让我们说一个SomethingElse类,并且Controller从控制器定义中的这两个类继承,那么将会有多重继承。你是正确的,C#不支持这一点。

相关问题