2015-11-03 26 views
0

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

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

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

+1

背后是什么原因? – walther

+0

我已经添加了另一个查询以及...它不回答如此创建不同的问题 – Imgane5h

+0

@walther有人问我同样的问题,我很困惑,所以想到这里分享 – Imgane5h

回答

3

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

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

myObject.extensionMethod(42); 

它会被编译到这一点:

ExtensionClass.extensionMethod(myObject, 42); 

所以的时候你的应用程序运行和MVC框架踢,所有的信息有关的任何扩展方法丢失了。 MVC无法支持“扩展方法操作”,即使它想要,因为它无法确定哪个扩展方法适用于哪个控制器类。