【问题标题】:Why does Controller inherit from ControllerBase on GitHub but not in VS?为什么 Controller 继承自 GitHub 上的 ControllerBase 而不是 VS?
【发布时间】:2016-04-22 12:43:15
【问题描述】:

在 Visual Studio 中按 Controller 上的 F12(转到定义)时,它会显示抽象基类。

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呢?

【问题讨论】:

  • Controller 只继承 ControllerBase 类,其余都是接口
  • @brykneval,是的,但 HomeController 继承自 ´Controller`,而后者又继承自 BaseController。但也许这不是多重继承?

标签: asp.net-core-mvc


【解决方案1】:

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

而且很可能您没有从当前的开发分支运行代码。

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

我通过单击每个修订版的 按钮检查了此文件的各种版本,但与您正在运行的代码版本不匹配。我看到这个文件的修订历史只能追溯到 2016 年 1 月 22 日。所以在此之前必须在不同的文件中定义控制器代码或由于其他原因,修订历史丢失(可能是当他们从 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

还有关于多重继承。当 HomeController 从 Controller 继承而 Controller 从 ControllerBase 继承时,这不是多重继承。如果有一个 ControllerBase ,假设是一个 SomethingElse 类,并且 Controller 是从控制器定义中的这两个类继承的,那么多重继承就是这样。你是对的,C# 不支持这个。

【讨论】:

    猜你喜欢
    • 2017-12-30
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2010-10-04
    • 2019-08-09
    • 1970-01-01
    • 2012-07-01
    • 2017-03-30
    相关资源
    最近更新 更多