2012-09-30 61 views
8

我正在读一本有关使自定义主体的教程,和我遇到的代码:什么是受保护的虚拟新

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

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

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

+0

它包含在文档中:http://msdn.microsoft.com/en-us/library/435f1dw2.aspx它应该始终是您的第一个电话号码 –

回答

21

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

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

new意味着在此创建新的覆盖层次结构,即停止覆盖基类中定义的方法并用此方法替换它。

更多细节可以发现here

+0

而且大多数时候这是一个坏主意引入一个类的'new'成员,隐藏已经存在的成员(从基类继承)。为什么不只是为该属性选择另一个名称(而不是'User'),该名称与已经存在的成员没有冲突? –

+0

那么,Controller.User已经从基类和Controller.CustomUser中有点没有意义了。我喜欢这个新东西,它使我的代码变得干净。感谢Zdeslav的详细解释。 –

6

new用于会员隐藏。

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

查看documentation

3

你的关键的问题:“关键字new什么是最我混淆了”

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

new Modifier (C# Reference)(Visual Studio的2013年)

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

相关问题