【问题标题】:C# Abstract ClassC# 抽象类
【发布时间】:2018-06-10 07:31:16
【问题描述】:

编译器是否在 C# 中编译抽象类?

如果是,那么编译器如何处理抽象类,就像普通类一样或存在一些差异。

如果没有,那么它如何允许在派生类中继承数据成员和抽象类的成员函数。

【问题讨论】:

  • 是的,编译器编译抽象类。它为抽象类生成 IL - 因为 CLR 也理解抽象类。它在此处描述的所有方面都与非抽象类不同:docs.microsoft.com/en-us/dotnet/csharp/language-reference/…您能否更具体地说明您的要求?
  • 我认为您可以通过使用反编译器检查抽象类是否存在来回答自己:-)
  • 如果你有一个名为C的抽象类,它会被编译成以下IL:.class private auto ansi abstract beforefieldinit YourNamespace.C extends [mscorlib]System.Object {}
  • 我是古玩,你怎么觉得抽象类可能编译不出来?

标签: c# oop abstract-class compiler-specific


【解决方案1】:

抽象类的行为确实像 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

我可以建议您创建测试程序集并使用 JetBrains 的 dotPeek(它是一个免费工具)浏览它们。您可以同时查看代码和 IL 代码。

【讨论】:

    猜你喜欢
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 2015-07-19
    • 2011-09-06
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多