当只返回base.method时,用new关键字隐藏方法的原因是什么?

时间:2017-09-06 12:09:55

标签: c# .net inheritance

我在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();
}

这是在DbSetDbSet<TEntity> : DbQuery<TEntity>)类:

/// <inheritdoc />
[SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")]
[EditorBrowsable(EditorBrowsableState.Never)]
public new Type GetType()
{
  return base.GetType();
}

为什么或何时使用new关键字,然后调用基础实现?

2 个答案:

答案 0 :(得分:3)

让我们考虑其他选择。

  1. 不要覆盖或新增任何内容

    问题:没有应用属性的代码。

  2. 只需覆盖它

    问题:GetType不是虚拟的。

  3. 因此,您使用new拨打base电话。

    真正的问题是[EditorBrowsable(EditorBrowsableState.Never)]他们遇到这些麻烦的重要性是什么?我唯一的猜测是,他们认为开发人员会在智能感知中将GetTypeElementType混淆。

答案 1 :(得分:1)

我认为您使用new关键字的一个原因是您想要更改访问修饰符。如果您的方法在基类中受到保护,则可以使用new关键字在子类中将其公开。