Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NETMVC操作方法重写_Asp.net Mvc - Fatal编程技术网

Asp.net mvc ASP.NETMVC操作方法重写

Asp.net mvc ASP.NETMVC操作方法重写,asp.net-mvc,Asp.net Mvc,控制器是否允许重写操作方法 例如: 我可以有两种方法吗 ActionResult SendResults() { ... } FileContentResult SendResults() { ... } 在.Net中,永远不能有两个返回类型不同的方法。代码如何知道选择哪一个 考虑以下代码: ActionResult result = SendResults(); 从该代码中无法判断要调用的FileContentResult方法是从ActionResult派生的。您必须执行以下操作: Act

控制器是否允许重写操作方法

例如:
我可以有两种方法吗

ActionResult SendResults() { ... }
FileContentResult SendResults() { ... }

在.Net中,永远不能有两个返回类型不同的方法。代码如何知道选择哪一个

考虑以下代码:

ActionResult result = SendResults();
从该代码中无法判断要调用的FileContentResult方法是从ActionResult派生的。您必须执行以下操作:

ActionResult result = SendFileContentResults();

C#基于方法名和参数对其签名。为了能够创建另一个方法,您必须有另一个签名,并且由于返回类型不在签名中,您必须更改名称或参数以使其可编译。

在.Net中,您永远不能有两个只因返回类型不同而不同的方法。代码如何知道选择哪一个

考虑以下代码:

ActionResult result = SendResults();
从该代码中无法判断要调用的FileContentResult方法是从ActionResult派生的。您必须执行以下操作:

ActionResult result = SendFileContentResults();
C#基于方法名和参数对其签名。要创建另一个方法,您必须有另一个签名,并且由于返回类型不在签名中,您必须更改名称或参数以使其编译。

  • 要重写-方法需要具有相同的返回类型
  • 要重载,方法需要有不同的签名
如果需要根据某些条件返回不同的结果,可以执行以下操作:

        public ActionResult SendResults()
        {
            if (somecondition)
            {
                return View();
            }
            else
            {
                return File("readme.txt", "text");
            }
        }
  • 要重写-方法需要具有相同的返回类型
  • 要重载,方法需要有不同的签名
如果需要根据某些条件返回不同的结果,可以执行以下操作:

        public ActionResult SendResults()
        {
            if (somecondition)
            {
                return View();
            }
            else
            {
                return File("readme.txt", "text");
            }
        }
C#不可能,Asp.net MVC操作方法可能 如果可以通过动作方法选择器可以分离的任何内容来区分控制器动作方法,则可能会有两个名称相同但结果不同的控制器动作:

[HttpGet]
[ActionName("SendResults")]
ActionResult SendResultsGet() { ... }

[HttpPost]
[ActionName("SendResults")]
FileContentResult SendResultsPost() { ... }
这里的主要思想是,您可以使用ActionNameAttribute以相同的名称命名多个操作方法。基于这些操作上的其他操作方法选择器属性,将执行其中任何一个操作

如果没有现成的操作方法选择器可供使用,则始终可以编写自己的自定义方法选择器来解决问题

我写了两篇关于动作方法选择器的博客文章,您可能对此感兴趣:

C#不可能,Asp.net MVC操作方法可能 如果可以通过动作方法选择器可以分离的任何内容来区分控制器动作方法,则可能会有两个名称相同但结果不同的控制器动作:

[HttpGet]
[ActionName("SendResults")]
ActionResult SendResultsGet() { ... }

[HttpPost]
[ActionName("SendResults")]
FileContentResult SendResultsPost() { ... }
这里的主要思想是,您可以使用ActionNameAttribute以相同的名称命名多个操作方法。基于这些操作上的其他操作方法选择器属性,将执行其中任何一个操作

如果没有现成的操作方法选择器可供使用,则始终可以编写自己的自定义方法选择器来解决问题

我写了两篇关于动作方法选择器的博客文章,您可能对此感兴趣:


实际上你可以+1,但要回答更一般的问题。。。是的,控制器确实允许重写操作方法,但C#中不允许只按返回类型不同的重载。(无论
FileContentResult
是否派生自
ActionResult
,编译器执行重载解析时都不会考虑返回类型。)@LukeH我知道。这只是为了让人们清楚地知道这是怎么不可能的。例如,如果一个返回int,另一个返回字符串,并且您说int i=returnvalue等,那么人类可以很容易地判断要覆盖哪个方法,但是对于上面的方法,不可能为human@bniwredyc:您可以在MSIL中完成,但不能在C#中完成。实际上您可以+1,但要回答更一般的问题。。。是的,控制器确实允许重写操作方法,但C#中不允许只按返回类型不同的重载。(无论
FileContentResult
是否派生自
ActionResult
,编译器执行重载解析时都不会考虑返回类型。)@LukeH我知道。这只是为了让人们清楚地知道这是怎么不可能的。例如,如果一个返回int,另一个返回字符串,并且您说int i=returnvalue等,那么人类可以很容易地判断要覆盖哪个方法,但是对于上面的方法,不可能为human@bniwredyc:您可以在MSIL中执行此操作,但不能在C#中执行。您可能正在谈论同名的操作方法,不是实际重写,这是OOP继承的一部分。@Robert Koritnik可能认为重载==重写您可能在谈论同名的操作方法,而不是实际重写,这是OOP继承的一部分。@Robert Koritnik可能认为重载==重写