为什么HttpContext是一个抽象类而不是一个接口?

时间:2016-10-10 16:37:24

标签: asp.net-core asp.net-core-1.0

为什么HttpContext是抽象类而不是接口?

该类是公共摘要,所有方法都是公共摘要。我不明白为什么这个类是一个抽象类。

有什么理由说它是抽象类而不是接口?

2 个答案:

答案 0 :(得分:1)

这是我从使用ASP.NET Core的Microsoft的Daniel Roth那里得到的回复。

  

我相信在这种情况下,使用抽象类可以在将来的版本中添加成员,这可以通过接口进行。

答案 1 :(得分:0)

关于此主题有很多意见(例如herehere)。即使ASP.NET团队通常使用接口,我也可以想到在这种情况下他们选择抽象类的一些原因:

<强>版本
我不希望HttpContext类改变很多,但抽象类版本比接口更容易(它们实际上根本不是版本),因为它们可以使用virtual关键字部分实现。 / p>

<强>封装
抽象类封装了一组功能,其中接口为特定功能提供了更多的契约。类只能实现一个抽象类,这对于HttpContext实现是有意义的,例如DefaultHttpContext

向后兼容性
尽管ASP.NET Core完全重写了ASP.NET,但开发人员习惯于对HttpContext类进行多年编程。这两个类都有很多特点。

请记住,我只是在这里猜测,也许ASP.NET团队的一些人可以启发我们。