Почему GetName в System.Reflection.Assembly, по-видимому, генерирует NotImplementedException при декомпиляции?

При отладке проблемы я копался в mscorlib и, в частности, в GetName() в System.Reflection.Assembly,

Глядя на код для метода в dotPeek, а также на исходный код для GetName() кажется, ничего в этом нет и бросает NotImplementedException:

#if FEATURE_CORECLR
    [System.Security.SecurityCritical] // auto-generated
#endif
    public virtual AssemblyName GetName()
    {
        return GetName(false);
    }

#if FEATURE_CORECLR
    [System.Security.SecurityCritical] // auto-generated
#endif
    public virtual AssemblyName GetName(bool copiedName)
    {
        throw new NotImplementedException();
    }

Может кто-нибудь объяснить, почему это вызывает исключение, но с использованием такой строки кода, как typeof(object).GetTypeInfo().Assembly.GetName().Version.ToString() возвращает правильную версию DLL?

1 ответ

Решение

Это потому что Assembly базовый класс, фактический объект, который вы получаете во время выполнения (в данном конкретном случае) RuntimeAssembly который реализует этот метод.

В зависимости от того, как вы получаете Assembly объект, есть различные действительные типы в игре, будь то для действительного кода времени выполнения или только для размышлений или чего-то еще.

Но Assembly это базовый класс.

Я могу сказать это однозначно, потому что Assembly класс является абстрактным, как видно из справочного источника:

public abstract class Assembly : _Assembly, IEvidenceFactory, ICustomAttributeProvider, ISerializable

И это также задокументировано:

[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class Assembly : System.Reflection.ICustomAttributeProvider, System.Runtime.InteropServices._Assembly, System.Runtime.Serialization.ISerializable, System.Security.IEvidenceFactory

Поэтому любой экземпляр объекта, который соответствует Assembly переменная должна быть производным классом.

Другие вопросы по тегам