我發現下面的代碼片段中的EntityFramework的DbSet類:當僅返回base.method時,用new關鍵字隱藏方法的原因是什麼?
public new Type GetType()
{
return base.GetType();
}
我不知道爲什麼基本方法是隱藏的,所有的基類有方法來實現調用基地。
這是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
關鍵字,然後調用基地實施?
我看到的唯一目的是將它從Intellisense('EditorBrowsable'屬性)中隱藏起來。我不知道爲什麼它需要。 –
@IvanStoev我也考慮過這個問題,但爲什麼在'DbQuery'和'DbSet'類中呢? – Mafii
好問題:)當然冗餘,在重構等過程中可能會被遺忘。這些重載/覆蓋的整體需求是一個謎 - 你可以看到一個叫做'隱藏對象方法'的同一個區域複製/粘貼在許多地方[源](https://github.com/aspnet/EntityFramework6/blob/master/src/EntityFramework/Infrastructure/DbQuery.cs)沒有額外的評論*爲什麼*是代碼。 –