IL知道INTERFACE是什么吗?

pen*_*ake 2 .net c# compiler-construction clr csc

例如,当您在源代码中引入静态类时,csc编译器将其转换为密封的抽象类(如果我错了,请纠正我).

但接口怎么样; CLR知道接口是什么吗?或编译器将其转换为某种类型的声明?

Dar*_*rov 10

例如,当您在源代码中引入一个抽象类时,csc编译器将其转换为一个密封的静态类(如果我错了请纠正我).

我在纠正你.

一个抽象类,例如:

public abstract class Foo
{

}
Run Code Online (Sandbox Code Playgroud)

在IL中看起来像这样:

.class public abstract auto ansi beforefieldinit Foo
    extends [mscorlib]System.Object
{
    .method family hidebysig specialname rtspecialname instance void .ctor() cil managed
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

但接口怎么样; CLR知道接口是什么吗?

是的,它知道.例如:

public interface IFoo
{

}
Run Code Online (Sandbox Code Playgroud)

翻译成:

.class public interface abstract auto ansi IFoo
{
}
Run Code Online (Sandbox Code Playgroud)


Ben*_*igt 7

你错了static class,就是转换成等价物sealed abstract class.

接口是.NET的完整成员,具有与任何其他类型不同的不同元数据和行为(例如,多重继承).