在Visual Studio中的public abstract class Controller : IActionFilter, IFilterMetadata, IAsyncActionFilter, IDisposable
上按 F12 (转到定义)时,它会显示抽象基类。
public abstract class Controller : ControllerBase, IActionFilter, IAsyncActionFilter, IDisposable
但是在查找时Controller.cs on GitHub。它表明它继承自ControllerBase
。
HomeController
为什么会这样?
我很困惑。另外,由于Controller
继承自Controller
,当C#不支持多重继承时,ControllerBase
如何从Decimal
继承?
答案 0 :(得分:4)
这两个来自不同的时间点。例如,您在GitHub上链接的文件是该文件的当前版本,请注意它来自Dev分支。
很可能你没有从当前的dev分支运行代码。
如果您点击GitHub上的历史记录按钮找到您链接的文件,您将看到该文件的修订历史记录。
我点击<>检查了此文件的各种版本每个修订版的按钮但不匹配您正在运行的代码的版本。我看到该文件的修订历史记录只能追溯到2016年1月22日。因此,在此之前,Controller代码必须已在不同的文件中定义,或者由于某些其他原因,修订历史记录丢失(可能是当它们从MVC重命名时) 6到Core 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
继承。
还有关于多重继承。当HomeController继承自Controller和Controller继承自ControllerBase时,它不是多重继承。如果有一个ControllerBase,那么多重继承就是说SomethingElse类,而Controller继承自控制器定义中的这两个类。你是对的,C#不支持这个。