2016-04-22 49 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#不支持這一點。

相關問題