C# 什么是新的

C# 什么是新的,c#,C#,我正在阅读一篇关于制作自定义主体的教程,我遇到了以下代码: public class BaseController : Controller { protected virtual new UserPrincipal User { get { return HttpContext.User as UserPrincipal; } } } “受保护的虚拟新”究竟是如何工作的 关键字“new”最让我困惑。new用于成员隐藏 与重写的方法不同,对基类的引用不会

我正在阅读一篇关于制作自定义主体的教程,我遇到了以下代码:

public class BaseController : Controller
{
    protected virtual new UserPrincipal User
    {
        get { return HttpContext.User as UserPrincipal; }
    }
}
“受保护的虚拟新”究竟是如何工作的


关键字“new”最让我困惑。

new
用于成员隐藏

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


请参阅。

受保护的
表示它仅在此类及其派生的类中可见

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

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


更多详细信息,请参见您的关键问题:“关键字<代码>新建最让我困惑。”

简短回答:
new
override
是互斥的<代码>新建用于替换从基类继承的类成员。相反,
override
用于扩展成员的基类实现

来自(Visual Studio 2013):

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


文档中介绍了它:它应该始终是您的第一个调用端口,大多数情况下,引入类的
新成员是个坏主意,它隐藏了一个已经存在的成员(从基类继承)。为什么不为属性选择另一个名称(而不是
User
),一个与已经存在的成员不冲突的名称?好吧,让Controller.User已经来自基类和Controller.CustomUser是没有意义的。我喜欢这个新的东西,它使我的代码干净。感谢Zdeslav的详细解释。