Для чего используется DiscardableAttribute? - PullRequest
1 голос
/ 18 февраля 2011

Не могу найти практического использования System.Runtime.CompilerServices.DiscardableAttribute даже для прототипа компилятора.Любое понимание?Благодаря.

1 Ответ

6 голосов
/ 18 февраля 2011

Чтобы привести более конкретный пример, чем то, что написано в документации, у вас может быть язык, который поддерживает встраивание вызовов статических методов, которые помечаются с помощью какого-то специального модификатора (из статического класса):

static class Bar {
  static inline void Foo(int a) { // Note fictional 'inline' modifier
    return a + 10;
  }
}

Если у вас есть такой класс, на него не ссылается ни одна другая часть вашего кода. Когда вы пишете:

int y = Bar.Foo(x);

Компилятор компилирует это как:

int y = x + 10;

Вам необходимо сохранить определение Bar в скомпилированном коде, потому что, если вы ссылаетесь на сборку из какого-то другого проекта, вы захотите увидеть его (и когда вы затем вызовете метод Foo, компилятор просто возьмите скомпилированный IL из этой сборки).

Однако класс Bar никогда не будет использоваться во время выполнения (он предназначен только для хранения кода, но не для его фактического выполнения). Я полагаю, вы могли бы пометить его как Discardable, а JIT мог бы пропустить его при создании собственного кода для вашей сборки (потому что класс никогда не будет использоваться).

...