Компилятор компилирует абстрактный класс на C#?
Если да, то как компилятор обрабатывает абстрактный класс, как обычный класс, или есть какая-то разница.
А если нет, то как это разрешает наследование членов данных и функции-члена абстрактного класса в производном классе.
Я думаю, вы можете ответить сами, используя декомпилятор, чтобы проверить, присутствует ли абстрактный класс или нет :-)
Если у вас есть абстрактный класс под названием C, он компилируется в следующий IL: .class private auto ansi abstract beforefieldinit YourNamespace.C extends [mscorlib]System.Object {}
Вы можете скомпилировать проект библиотеки, содержащий абстрактный класс, в dll, а затем использовать эту dll в другом месте для расширения от этого абстрактного класса - так что этот абстрактный класс должен быть скомпилирован в эту dll.
Мне любопытно, почему вы думаете, что абстрактные классы не могут компилироваться?
Потому что абстрактный класс не следует рассматривать как настоящий класс для C#. Компилятор рассматривает его как мнимый класс.
@PrashantChoudhary, почему ты так думаешь? Почему бы ему не быть «настоящим» классом или даже «воображаемым»?





Абстрактный класс действительно ведет себя как обычный класс в IL, единственное отличие - добавленный флаг / ключевое слово abstract.
Общий публичный класс в IL выглядит так (без тела)
.class public auto ansi beforefieldinit
NAMESPACE.CLASS_NAME
extends [mscorlib]System.Object
абстрактный класс выглядит так
.class public abstract auto ansi beforefieldinit
NAMESPACE.CLASS_NAME
extends [mscorlib]System.Object
I can recommend you creating test assemblys and browsing them with dotPeek from JetBrains (its a free tool). You can look trough the code and the IL code at the same time.
Да, компилятор компилирует абстрактные классы. Он генерирует IL для абстрактных классов - потому что CLR также понимает абстрактные классы. Он отличается от неабстрактного класса всеми способами, описанными здесь: docs.microsoft.com/en-us/dotnet/csharp/language-reference/… Не могли бы вы уточнить, о чем вы спрашиваете?