我正在阅读有关制作自定义主体的教程,我遇到了代码:
public class BaseController : Controller
{
protected virtual new UserPrincipal User
{
get { return HttpContext.User as UserPrincipal; }
}
}
“受保护的虚拟新”究竟是如何运作的?
关键字“新”是最让我困惑的。
答案 0 :(得分:29)
protected
表示只在此类及其派生类中可见。
virtual
表示可以在派生类中覆盖它。
new
表示您在此处创建新的重写层次结构,即您停止覆盖基类中定义的方法并将其替换为此方法。
可以找到更多详细信息here
答案 1 :(得分:7)
答案 2 :(得分:4)
您的关键问题:“关键字new
让我感到困惑。”
简答: new
和override
是互斥的。 new
用于替换从基类继承的类成员。相反,override
用于扩展成员的基类实现。
来自new Modifier (C# Reference) (Visual Studio 2013):
在同一会员上同时使用新和override是错误的, 因为这两个修饰语具有相互排斥的含义。 新 修饰符创建一个具有相同名称的新成员并导致该成员 原始成员变得隐藏。 覆盖修饰符扩展了 继承成员的实现。