什么是受保护的虚拟新

时间:2012-09-30 14:42:32

标签: c#

我正在阅读有关制作自定义主体的教程,我遇到了代码:

public class BaseController : Controller
{
    protected virtual new UserPrincipal User
    {
        get { return HttpContext.User as UserPrincipal; }
    }
}

“受保护的虚拟新”究竟是如何运作的?

关键字“新”是最让我困惑的。

3 个答案:

答案 0 :(得分:29)

protected表示只在此类及其派生类中可见。

virtual表示可以在派生类中覆盖它。

new表示您在此处创建新的重写层次结构,即您停止覆盖基类中定义的方法并将其替换为此方法。

可以找到更多详细信息here

答案 1 :(得分:7)

new用于隐藏成员。

与重写方法不同,new方法不会被对基类的引用调用。

请参阅documentation

答案 2 :(得分:4)

您的关键问题:“关键字new让我感到困惑。”

简答: newoverride是互斥的。 new用于替换从基类继承的类成员。相反,override用于扩展成员的基类实现。

来自new Modifier (C# Reference) (Visual Studio 2013)

  

在同一会员上同时使用override是错误的,   因为这两个修饰语具有相互排斥的含义。   修饰符创建一个具有相同名称的新成员并导致该成员   原始成员变得隐藏。 覆盖修饰符扩展了   继承成员的实现。