IL-код интерфейса - PullRequest
       5

IL-код интерфейса

7 голосов
/ 24 января 2012

Я использую LinqPad и смотрю на код IL (с включенной оптимизацией компилятора), сгенерированный для следующего интерфейса и класса, реализующего интерфейс:

public interface IStockService
{
    [OperationContract]
    double GetPrice(string ticker);
}

public class StockService : IStockService
{
    public double GetPrice(string ticker)
    {
        return 93.45;
    }
}

Код IL:

IStockService.GetPrice:

StockService.GetPrice:
IL_0000:  ldc.r8      CD CC CC CC CC 5C 57 40 
IL_0009:  ret         

StockService..ctor:
IL_0000:  ldarg.0     
IL_0001:  call        System.Object..ctor
IL_0006:  ret         

Удивительно, но я не вижу кода IL для интерфейса.Это из-за того, как работает LinqPad, или компилятор C # обрабатывает интерфейсы по-другому?

1 Ответ

16 голосов
/ 24 января 2012

IL для тел методов. Интерфейс не содержит никаких тел методов, поэтому нет IL.

Тело метода в этом случае (проще говоря) - это любой исполняемый код. Ничто в интерфейсе не является исполняемым, так как это просто контракт. Разработчик интерфейса должен предоставить реализацию, которая обычно будет содержать IL.

...