我正在读一本有关使自定义主体的教程,和我遇到的代码:什么是受保护的虚拟新
public class BaseController : Controller
{
protected virtual new UserPrincipal User
{
get { return HttpContext.User as UserPrincipal; }
}
}
究竟如何,是“受保护的虚拟新”的工作?
关键词“新”是最让我困惑的。
我正在读一本有关使自定义主体的教程,和我遇到的代码:什么是受保护的虚拟新
public class BaseController : Controller
{
protected virtual new UserPrincipal User
{
get { return HttpContext.User as UserPrincipal; }
}
}
究竟如何,是“受保护的虚拟新”的工作?
关键词“新”是最让我困惑的。
protected
意味着它只在该类和从它派生的类中可见。
virtual
表示它可以在派生类中被覆盖。
new
意味着在此创建新的覆盖层次结构,即停止覆盖基类中定义的方法并用此方法替换它。
更多细节可以发现here
而且大多数时候这是一个坏主意引入一个类的'new'成员,隐藏已经存在的成员(从基类继承)。为什么不只是为该属性选择另一个名称(而不是'User'),该名称与已经存在的成员没有冲突? –
那么,Controller.User已经从基类和Controller.CustomUser中有点没有意义了。我喜欢这个新东西,它使我的代码变得干净。感谢Zdeslav的详细解释。 –
你的关键的问题:“关键字new
什么是最我混淆了”
简短回答:new
和override
是互斥的。 new
用于替换从基类继承的类成员。相比之下,override
用于扩展成员的基类实现。
从new Modifier (C# Reference)(Visual Studio的2013年):
这是同一部件上使用两种新和override, 因为这两个修饰符互斥的含义的错误。 新 修饰符创建一个具有相同名称的新成员,并导致 原始成员隐藏。 覆盖修饰符扩展了继承成员的 实现。
它包含在文档中:http://msdn.microsoft.com/en-us/library/435f1dw2.aspx它应该始终是您的第一个电话号码 –