我在EntityFramework的DbSet类中找到了以下代码片段:
public new Type GetType()
{
return base.GetType();
}
我不知道为什么隐藏了基本方法,所有基类都实现了调用base的方法。
这是object.GetType()
:
[SecuritySafeCritical]
[__DynamicallyInvokable]
[MethodImpl(MethodImplOptions.InternalCall)]
public extern Type GetType();
这是DbQuery
类:
/// <inheritdoc />
[EditorBrowsable(EditorBrowsableState.Never)]
[SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")]
public new Type GetType()
{
return base.GetType();
}
这是在DbSet
(DbSet<TEntity> : DbQuery<TEntity>
)类:
/// <inheritdoc />
[SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")]
[EditorBrowsable(EditorBrowsableState.Never)]
public new Type GetType()
{
return base.GetType();
}
为什么或何时使用new
关键字,然后调用基础实现?
答案 0 :(得分:3)
让我们考虑其他选择。
不要覆盖或新增任何内容
问题:没有应用属性的代码。
只需覆盖它
问题:GetType
不是虚拟的。
因此,您使用new
拨打base
电话。
真正的问题是[EditorBrowsable(EditorBrowsableState.Never)]
他们遇到这些麻烦的重要性是什么?我唯一的猜测是,他们认为开发人员会在智能感知中将GetType
与ElementType
混淆。
答案 1 :(得分:1)
我认为您使用new关键字的一个原因是您想要更改访问修饰符。如果您的方法在基类中受到保护,则可以使用new关键字在子类中将其公开。