MVC动作方法可以是静态还是扩展方法?

时间:2015-11-03 10:22:03

标签: .net asp.net-mvc

如果我想声明我的动作方法是静态的,我可以拥有它吗?如果是,那么如何做以及它的用途是什么?如果没有用,为什么MVC允许它定义? 例如,

public static ActionResult Index()
{
  //Is it possible?
   return View();
}

如果有可能,有人可以告诉我一个扩展方法的例子吗?

1 个答案:

答案 0 :(得分:3)

MVC不允许定义它,C#可以。仅仅因为编程语言中的某些构造是可能的,并不意味着您的框架将支持它。还有很多其他的东西可以用C#编写,但MVC会忽略或抱怨。

所以,不,没有静态行动。也没有扩展方法。扩展方法只是一种语法糖; C#编译器的一个简单的手。编译代码时,扩展方法与任何其他静态方法没有区别。对它们的调用将转换为简单的静态方法调用。换句话说,即使你写这个:

myObject.extensionMethod(42);

它将被编译为:

ExtensionClass.extensionMethod(myObject, 42);

因此,当您的应用程序运行并且MVC框架启动时,有关任何扩展方法的所有信息都将丢失。 MVC无法支持"扩展方法操作"即使它想要,因为它无法确定哪种扩展方法适用于哪个控制器类。