什么是受保护的虚拟新

Adm*_*vić 13 c#

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

public class BaseController : Controller
{
    protected virtual new UserPrincipal User
    {
        get { return HttpContext.User as UserPrincipal; }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

关键词"新"是最让我困惑的.

Zde*_*vic 31

protected 意味着它只在此类和从它派生的类中可见.

virtual 意味着它可以在派生类中重写.

new 意味着在这里创建新的重写层次结构,即您停止覆盖基类中定义的方法并将其替换为此方法.

更多细节可以在这里找到


SLa*_*aks 7

new 用于成员隐藏.

与重写方法不同,new不会通过对基类的引用来调用方法.

请参阅文档.


Dav*_*dRR 5

您的关键问题: “关键字new是让我最困惑的地方。”

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

来自新的修饰符(C#参考) (Visual Studio 2013)

在同一成员上同时使用newoverride是错误的,因为这两个修饰符具有互斥的含义。该新的 功能键可以创建具有相同名称的新成员,导致原始成员变为隐藏。该覆盖修饰符扩展了继承的成员实施。