【发布时间】:2015-07-31 00:42:51
【问题描述】:
我刚刚安装了 VS 2015,我注意到 MVC6 的自动脚手架发生了一些变化。我很好奇微软为什么做出这些改变,因为我认为如果他们决定做一些改变,可能会有一些我可能不知道的好处。
在 VS 2013 中,始终使用 MVC 5 Auto-Scaffolding:ActionResult
在 VS 2015 中,MVC 6 Auto-Scaffolding 切换到使用:IActionResult
在 VS 2015 中,我注意到微软团队不想再这样做了:
public class Test{
private int i;
public Test (int i){
this.i = i;
}
}
虽然在所有生成的类中我都看到了它们:
public class Test{
private int _i;
public Test (int i){
_i = i;
}
}
如果只是编码风格的问题,那我会立即失去兴趣,不知道他们为什么改变了这一点,但如果这背后有任何合乎逻辑的解释,我迫不及待想知道那是什么。
【问题讨论】:
-
不确定您的
Test问题,但至于ActionResult与IActionresult- 我认为它们遵循约定并且IActionResult是一个接口.. 所以你获得了编码的所有优势到一个接口而不是一个类 - 即能够更改返回类型而不知道它是什么直到运行时。例如JsonResult实现了IActionResult- 然后你可以搭建与上面相同的代码,但可以轻松地将返回类型从ActionResult更改为JsonResult而无需更改方法签名。 -
他们将 actionresult 抽象出来,因此没有具体的实现,因此您可以使用任何类,只要它继承自 IActionresult 接口
-
我相信这是 2 个问题。第一个是关于 IActionResult 的,第二个是关于私有变量命名约定的。你应该把它分开。
-
两个 Test 类产生相同的 CLR 代码(除了元数据说“有一个名为 _i 的字段”而不是“有一个名为 i 的字段”)。虽然更改微不足道,但我喜欢它——下划线约定消除了许多难以检测到的错误,其中您有
i = value但需要this.i = value。
标签: c# asp.net-mvc visual-studio-2015 asp.net-core-mvc