-1

HomeController 中有一种称为 Index 的方法。(只是微软提供的默认模板)

 public class HomeController : Controller
    {

        public ActionResult Index()
        {
            ViewBag.Message = "Welcome to ASP.NET MVC!";
            return View();
        }

        public ActionResult About()
        {
            return View();
        }
   }

现在我想要的是……覆盖索引方法。如下所示。

public partial class HomeController : Controller
    {

        public virtual ActionResult Index()
        {
            ViewBag.Message = "Welcome to ASP.NET MVC!";
            return View();
        }

        public ActionResult About()
        {
            return View();
        }

        public override ActionResult Index()
        {
            ViewBag.Message = "Override Index";
            return View();
        }

    }

我不希望对现有方法进行任何修改,例如 OO 设计中的开闭原则。有没有可能?还是有其他方法?

4

1 回答 1

1

AController是一个普通的 C# 类,所以你必须遵循正常的继承规则。如果您试图覆盖同一个类中的方法,那是无稽之谈并且不会编译。

public class FooController
{
    public virtual ActionResult Bar()
    {
    }

    // COMPILER ERROR here, there's nothing to override
    public override ActionResult Bar()
    {
    }
}

如果您有 的子类Foo,则可以覆盖,如果基类上的方法标记为virtual。(而且,如果子类不覆盖该方法,则将调用基类上的方法。)

public class FooController
{
    public virtual ActionResult Bar()
    {
        return View();
    }
}

public class Foo1Controller : FooController
{
    public override ActionResult Bar()
    {
        return View();
    }
}

public class Foo2Controller : FooController
{
}

所以它是这样工作的:

Foo1 foo1 = new Foo1();
foo1.Bar();               // here the overridden Bar method in Foo1 gets called
Foo2 foo2 = new Foo2();
foo2.Bar();               // here the base Bar method in Foo gets called
于 2012-09-27T05:47:36.593 回答