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的详细解释。