tôi thấy đoạn mã sau trong lớp DbSet của EntityFramework:lý do để ẩn một phương thức với từ khóa mới là gì khi chỉ trả về base.method?
public new Type GetType()
{
return base.GetType();
}
Tôi không có ý tưởng tại sao các phương pháp cơ bản được ẩn, tất cả các lớp cơ sở có phương pháp thực hiện kêu gọi cơ sở.
Đây là object.GetType()
:
[SecuritySafeCritical]
[__DynamicallyInvokable]
[MethodImpl(MethodImplOptions.InternalCall)]
public extern Type GetType();
này nằm trong lớp DbQuery
:
/// <inheritdoc />
[EditorBrowsable(EditorBrowsableState.Never)]
[SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")]
public new Type GetType()
{
return base.GetType();
}
Và đây là trong DbSet
(DbSet<TEntity> : DbQuery<TEntity>
) lớp:
/// <inheritdoc />
[SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")]
[EditorBrowsable(EditorBrowsableState.Never)]
public new Type GetType()
{
return base.GetType();
}
Tại sao hoặc khi bạn có sử dụng sốkhông 10 từ khóa và sau đó gọi triển khai cơ sở?
Mục đích duy nhất tôi thấy là ẩn nó khỏi thuộc tính Intellisense (thuộc tính 'EditorBrowsable'). Tôi không có ý tưởng tại sao nó cần thiết mặc dù. –
@IvanStoev Tôi cũng nghĩ về điều đó, nhưng tại sao nó lại ở cả lớp 'DbQuery' và' DbSet'? – Mafii
Câu hỏi hay :) Dự phòng tất nhiên, có thể bị lãng quên trong quá trình tái cấu trúc vv. Toàn bộ nhu cầu về quá tải/ghi đè này là một bí ẩn - bạn có thể thấy một và cùng một khu vực được gọi là 'Phương pháp đối tượng ẩn 'được sao chép/dán ở nhiều nơi [source] (https://github.com/aspnet/EntityFramework6/blob/master/src/EntityFramework/Infrastructure/DbQuery.cs) không có chú thích bổ sung * tại sao * là mã đó. –